您为包含 QGraphicsView 的 QWidget/QMainWindow 重新实现了 wheelEvent,但是 QGraphicsView 的 wheelEvent 保持不变。
您可以从 QGraphicsView 派生,为派生类重新实现 wheelEvent 并使用派生类而不是 QGraphicsView - 这样您甚至不需要在 QWidget/QMainWindow 中使用 wheelEvent,并且您可以自定义重新实现的 wheelEvent 来执行您想要的操作。像这样的东西:
头文件:
class myQGraphicsView : public QGraphicsView
{
public:
myQGraphicsView(QWidget * parent = nullptr);
myQGraphicsView(QGraphicsScene * scene, QWidget * parent = nullptr);
protected:
virtual void wheelEvent(QWheelEvent * event);
};
源文件:
myQGraphicsView::myQGraphicsView(QWidget * parent)
: QGraphicsView(parent) {}
myQGraphicsView::myQGraphicsView(QGraphicsScene * scene, QWidget * parent)
: QGraphicsView(scene, parent) {}
void myQGraphicsView::wheelEvent(QWheelEvent * event)
{
// your functionality, for example:
// if ctrl pressed, use original functionality
if (event->modifiers() & Qt::ControlModifier)
{
QGraphicsView::wheelEvent(event);
}
// otherwise, do yours
else
{
if (event->delta() > 0)
{
scale(2, 2);
}
else
{
scale(0.5, 0.5);
}
}
}