我创建了一个类 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/