如何在QMainWindow中按下Ctrl时禁用滚动功能

时间:2014-11-25 03:18:49

标签: c++ qt scroll scrolltop mousewheel

我目前正在为我的项目开展QT工作。我实现了一个继承自QMainWindow的MainWindow类。

在MainWindow中,我处理了鼠标滚轮事件:

void MainWindow::wheelEvent ( QWheelEvent * event )
{
   if (event->modifiers().testFlag(Qt::ControlModifier)) {
      if (event->delta() > 0) {
        zoomInAct();
      }
      else if(event->delta()<0){
        zoomOutAct();
      }
  }
}

问题是:当我按下CONTROL KEY并转动鼠标时,滚动条总是滚动到顶部或底部,然后到达我的wheelEvent功能。当你按下控制并转动鼠标时,你能帮忙放大/缩小吗? (不滚动滚动条)

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:2)

Acctualy,有一个子窗口小部件首先处理滚轮事件(默认事件句柄滚动滚动条)。

解决方案:在子窗口小部件中覆盖wheelevent,以便在按下控制键时将其发送到父窗口小部件(MainWindow)。

class WorkArea: public QWidget {
...
  virtual void wheelEvent(QWheelEvent *event)
  {
    if(event->modifiers().testFlag(Qt::ControlModifier))
      MainWindow::wheelEvent(event);
    else
      QWidget::wheelEvent(event);
  }
...
}

答案 1 :(得分:1)

在此处查看您当前的实现,如果您已添加自己的功能并且不希望将事件进一步传播到父级,则未指定event-&gt; accept()。尝试在添加逻辑的if条件中添加event->accept()

并尝试添加调试语句来测试事件是否到达此处或其他人正在处理该事件。我是指其他人的小部件。 UI的一些描述以及要放大的小部件将有助于进一步调查问题。

请务必阅读Qt中的事件系统。可用文档here