2013-04-29 1000 views
3

我有一个图形视图,当用户按下控件和鼠标点击时,我已经设置了自己的手动滚动功能。如何禁用滚轮事件的滚动功能QGraphicsView Qt C++

我已经删除了滚动条,但鼠标滚轮仍然滚动,甚至滚动显示在qGraphicsView中显示的图像,显​​示空白(白色)空间,而我的手拖动时没有。

我该如何让轮子变成直线,一点都没做?

我知道有我就可以把我的代码,而派生类,因为我问这个曾经前后得到了正确的答案,但取出的答案,我没有救代码:(

功能

下面的代码什么也不做,甚至接近预期的功能,在启动时,我得到鼠标仍然做一些消息,然后点击和滚轮事件的一切都只是显示了第二个消息......这样啊不工作

bool GUI::eventFilter(QObject *object, QEvent *event) 
{ 
    if (object == ui->graphicsView && event->type() == QEvent::GraphicsSceneWheel) 
    { 
     std::cout << "Wheel Blocked"; 
     return true; 
    } 
    std::cout << "Mouse Wheel still doing something"; 
    return false; 
} 

然后这段代码安装过滤器

ui->graphicsView->installEventFilter(this); 
+0

你是如何在没有派生类的情况下实现自定义拖动的? – ypnos 2013-04-29 12:54:14

+0

增加了一些代码来回答你的问题 – AngryDuck 2013-04-29 12:56:48

+0

在此期间有人已经给出了正确的答案,我花了upvote。顺便说一句。从您的代码示例中,我看不到您覆盖哪个对象的mouseEvent()。正如你所说,你没有派生类。 – ypnos 2013-04-29 13:16:49

回答

8

安装一个eventfilter和筛选

QEvent::GraphicsSceneWheel 

在您的应用程序

bool MainWindow::eventFilter(QObject *object, QEvent *event) 
{ 
    if (object == ui->graphicsView->viewport() && event->type() == QEvent::Wheel) { 
     qDebug() << "SCroll"; 
     return true; 
    } 
    return false; 
} 

创建这样的事情,并安装到你的widget。

yourwidget->viewport()->installEventFilter(this); 

编辑: 我认为它应该的QEvent :: GraphicsSceneWheel工作。如果有人知道为什么带滚轮的作品,请解释

+0

给出了这个错误'覆盖虚拟函数返回类型不同,并且不是'QObject :: eventFilter'的协变' – AngryDuck 2013-04-29 13:07:07

+0

http://qt-project.org/doc/qt-4.8/qobject.html#eventFilter这是你的函数应该重载,另外,请注意,在那个例子中,它们返回父方法来保持流。 – Trompa 2013-04-29 13:11:42

+0

这个工作。粘贴你的代码,如此。我们可以发现你在做什么错误 – Trompa 2013-04-29 15:34:29

0

而且,你可以使用继承

class MyCustomGraphicsView : public QGraphicsView 
{ 

virtual void wheelEvent (QWheelEvent * event) 
{ 
//here you can modify wheel-event 
} 

} 

修改的QGraphicsView这是很容易的方法,因为QT设计师可以GraphicsView元素的形式与遗传相关联class

+1

OP明确地说“没有派生类” – Trompa 2013-04-29 13:30:52