QT - 双击时mousePressEvent调用3次

时间:2014-07-07 22:29:46

标签: c++ qt

我创建了一个继承QObject和QGraphicsEllipseItem的类GraphicPoint。

.h文件

class GraphicPoint : public QObject, public QGraphicsEllipseItem
{
    Q_OBJECT

public:
    GraphicPoint(qreal x, qreal y, qreal width, qreal height, QWidget *parent = nullptr);

signals:
    void clicked();

private:
    void mousePressEvent(QGraphicsSceneMouseEvent *event);
};

.cpp文件

GraphicPoint::GraphicPoint(qreal x, qreal y, qreal width, qreal height, QWidget *parent) :
    QObject(parent),
    QGraphicsEllipseItem(x, y, width, height, nullptr)
{
}

void GraphicPoint::mousePressEvent(QGraphicsSceneMouseEvent *event){
    event->accept();
    emit clicked();
}

在主窗口中,我创建了一个视图和一个场景,并将该点添加到场景中。快速单击按钮两次调用mousePressEvent 3次,而稍微慢一点调用它只需2次。这是主窗口构造函数

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    n = 0;
    view = new QGraphicsView(this);
    scene = new QGraphicsScene(this);
    view->setScene(scene);
    testPoint = new GraphicPoint(0, 0, 10, 10, this);
    connect(testPoint, &GraphicPoint::clicked, [this](){
        n++;
        qDebug()<<n;
    });
    scene->addItem(testPoint);
    setCentralWidget(view);
}

快速点击2次后,QDebug输出3行,数字为1,2,3。

发生这种情况的原因是什么?是否有一些默认的doubleclick事件调用了额外的mousePressEvent?

1 个答案:

答案 0 :(得分:0)

您的问题的原因是void QGraphicsItem::mouseDoubleClickEvent,默认情况下会调用mousePressEvent()。为了解决这个问题,只需重载mouseDoubleClickEvent( QGraphicsSceneMouseEvent * event )并将其留空。