0

私はqtとc ++が初めてです。信号をプロットする qgraphicsview があります。マウスのクリックと長方形の描画で特定の領域をズームします。したがって、マウスを押した位置とドラッグした位置が必要です。このために、私は次のようにします:

ヘッダーファイルで:

#include <QtWidgets/QMainWindow>
#include <QGraphicsScene>
#include <QMouseEvent>
#include <QGraphicsSceneMouseEvent>
#include "ui_QtGuiApplication.h"

class QtGuiApplication : public QMainWindow
{
Q_OBJECT

public:
QtGuiApplication(QWidget *parent = Q_NULLPTR);

protected:
void mouseMoveEvent(QMouseEvent* event);
void mousePressEvent(QMouseEvent* event);
bool eventFilter(QObject *obj, QEvent *ev);

private:
Ui::QtGuiApplicationClass ui;
QPoint Zoom_point1_;
QPoint Zoom_point2_;
QGraphicsScene* scene = new QGraphicsScene();

};

ソースファイル内:

    QtGuiApplication::QtGuiApplication(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    ui.graphicsView->installEventFilter(this);
    ui.graphicsView->setMouseTracking(true);
}

bool QtGuiApplication::eventFilter(QObject * obj, QEvent * ev)
{
    if (obj == ui.graphicsView)
        if (ev->type() == QEvent::MouseMove)
        {
            QMouseEvent *mEvent = (QMouseEvent*)ev;
            Zoom_point2_ = mEvent->pos();
        }
    return false;
}
void QtGuiApplication::mouseMoveEvent(QMouseEvent * ev)
{
    Zoom_point2_ = ev->globalPos();
    //do some thing …
}

void QtGuiApplication::mousePressEvent(QMouseEvent * ev)
{
    Zoom_point1_ = ev->globalPos(); 
}

グラフィックスビューでマウスを押して移動すると、クリックした位置は認識できますが、 呼び出されmouseMoveEvent(QMouseEvent * ev)ません。また、obj == ui.graphicsView声明はeventFilter決して発生しません。何が問題なのですか? どうすれば修正できますか?

4

1 に答える 1