c++ - QT - mousePressEvent 在双击时调用 3 次

标签 c++ qt

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

.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();
}

在主窗口中,我创建了一个 View 和一个场景,并将点添加到场景中。快速单击按钮两次会调用 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。

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

最佳答案

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

关于c++ - QT - mousePressEvent 在双击时调用 3 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24620951/

相关文章:

python - Qt 未在远程桌面上加载(无法初始化 XRandr)

c++ - 如何使用 winapi 在 windows 中获取当前事件窗口的进程名称?

c++ - 在树C++中查找特定的节点高度

C++ boost::qi 将空格和换行符分隔的数字解析为二维 vector

c++ - 使用 gcc 4.6 在 mingw 上编译 qt 4.7.3

android - Qt 需要一些未知的 Android SDK

c++ - Qt 中的市场价格图表

c++ - 如何从椭圆图像中找到上下弧的长度

c++ - 继承和构造函数的问题

c++ - boost::unordered_multimap 是否调整大小