C++ 如何禁用控制盘事件QGraphicsView Qt C+上的滚动功能+;

C++ 如何禁用控制盘事件QGraphicsView Qt C+上的滚动功能+;,c++,qt,C++,Qt,我有一个图形视图,并且我设置了自己的功能,当用户按下控件并单击鼠标时,可以手动拖动滚动 我已经移除了滚动条,但鼠标滚轮仍会滚动,甚至会滚动到显示在qGraphicsView中的图像旁边,该图像显示的是空白(白色)空间,而我的手不会拖动 我怎样才能使车轮笔直向上,什么也不做 我知道有一个函数我可以在没有派生类的情况下直接放在代码中,因为我以前问过一次这个问题,得到了正确的答案,但是答案被删除了,我没有保存代码:( 下面的代码没有做任何事情,甚至接近预期的功能,在启动时,我得到的鼠标仍在做一些事情的

我有一个图形视图,并且我设置了自己的功能,当用户按下控件并单击鼠标时,可以手动拖动滚动

我已经移除了滚动条,但鼠标滚轮仍会滚动,甚至会滚动到显示在
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;
 }
安装一个过滤器,用于

QEvent::GraphicsSceneWheel
在应用程序中创建类似的内容

bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
    if (object == ui->graphicsView->viewport() && event->type() == QEvent::Wheel) {
        qDebug() << "SCroll";
        return true;
    }
    return false;
}
编辑:
我认为它应该与QEvent::GraphicsContenWheel一起使用。如果有人知道为什么使用Wheel,请解释一下,你也可以使用继承来修改QGraphicsView

class MyCustomGraphicsView : public QGraphicsView
{

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

}

这是一种简单的方法,因为qt designer可以将表单上的GraphicsView元素与继承的类关联起来

在没有派生类的情况下,您是如何实现自定义拖动的?添加了一些代码来回答您的问题。同时,有人已经给出了正确的答案,我进行了一次投票。顺便说一句,从您的代码示例中,我看不出是哪个对象ct的mouseEvent()您正在覆盖。正如您所说,您没有派生类。如果出现此错误,则
覆盖虚拟函数的返回类型与'QObject::eventFilter'不同且不协变。
这是您应该重载的函数。另外,请注意,在该示例中,它们返回父方法以保持流。这确实有效。请粘贴您的代码。如果您能看到它与您的不同之处,并让我知道您的想法,我们可以发现您做错了什么。greatTry在viewport中安装(第二段代码的第二行)OP explicit说“没有派生类”
yourwidget->viewport()->installEventFilter(this);
class MyCustomGraphicsView : public QGraphicsView
{

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

}