QGraphicsView 子类和事件

QGraphicsView subclass and events

本文关键字:事件 子类 QGraphicsView      更新时间:2023-10-16

在我的项目中,我有一个QGraphicsView和一个QGraphicsScene。我需要在我的视图中添加一些额外的事件,所以我已经子类化了QGraphicsView.

问题是当我设置mousePressEvent时,我会覆盖拖动模式ScrollHandDrag

我的问题如下:有没有办法在默认QGraphicsView答案之间切换mousePressEvent和自定义答案(例如,使用m_click来区分不同的情况)?

这是我的代码:

MyQGraphicsView.h

class MyQGraphicsView : public QGraphicsView
{
    Q_OBJECT
    public:
    MyQGraphicsView(QGraphicsScene *scene, QWidget *parent = 0);
    public slots:
    // void mousePressEvent(QMouseEvent * e);
    private:
    QGraphicsScene *m_scene;
    int m_click;
};

MyQGraphicsView.cpp

MyQGraphicsView::MyQGraphicsView(QGraphicsScene *scene, QWidget *parent) :
    QGraphicsView(parent),
    m_scene(scene),
    m_click(0)
{
    setScene(m_scene);
}
/*void MyQGraphicsView::mousePressEvent(QMouseEvent * e)
{
    double rad = 1;
    QPointF pt = mapToScene(e->pos());
    if (m_click)
    {
        m_scene->addEllipse(pt.x()-rad, pt.y()-rad, rad*2.0, rad*2.0, QPen(), QBrush(Qt::SolidPattern));
        m_click = 0;
    }
    else
    {
        m_click = 1;
    }
}*/

基本上我希望代码做的是:当m_click=1时,画一个点,但当m_click=0使用ScrollHandDrag时。

我可以让两者分开工作,但不能同时工作。

if ( !m_click ) {
    QGraphicsView::mousePressEvent(e);
}

只需调用父类的实现即可使用"正常"行为。