1

私のプロジェクトには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

両方を別々に機能させることはできますが、同時にはできません。

4

1 に答える 1

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

親クラスの実装を呼び出すだけで、「通常の」動作を使用できます。

于 2012-06-08T13:40:17.697 に答える