QTableView和QScrollArea共存,禁止鼠标滚轮消息传递给父窗口

QTableView和QScrollArea共存,禁止鼠标滚轮消息传递给父窗口。

默认情况下,QTableView和QScrollArea共存的效果是:

  1. 当QTableView存在滚动条时,并且可以滚动,则QTableView滚动;
  2. 当QTableView存在滚动条时,并且已经滚动到极限,则QScrollArea滚动;
  3. 当QTableView不存在滚动条时,则QScrollArea滚动。

期望的效果是:

  1. 当QTableView存在滚动条时,并且可以滚动,则QTableView滚动;
  2. 当QTableView存在滚动条时,并且已经滚动到极限,则不滚动;
  3. 当QTableView不存在滚动条时,则QScrollArea滚动。

 

对于使用翻页键的情况,不做考虑,仍然支持QScrollArea滚动。

 

代码如下:

class QtExtNoParentScrollTableView : public QTableView
{
public:
explicit QtExtNoParentScrollTableView(QWidget* parent = 0);
void wheelEvent(QWheelEvent*) override;
};




QtExtNoParentScrollTableView::QtExtNoParentScrollTableView(QWidget *parent)
: QTableView(parent)
{
}

void QtExtNoParentScrollTableView::wheelEvent(QWheelEvent* event)
{
__super::wheelEvent(event);

if (!event->isAccepted())
{
if ((verticalScrollBar() != nullptr && verticalScrollBar()->isVisible()) || (horizontalScrollBar() != nullptr && horizontalScrollBar()->isVisible()))
{
event->setAccepted(true);
}
}
}

 

转载请注明来源,谢谢。

有偿解决C++编程问题,承接项目定制开发;寻一份全职或兼职Windows C++开发工作。联系邮箱:[email protected]


老刀的技术日志 » QTableView和QScrollArea共存,禁止鼠标滚轮消息传递给父窗口

发表评论