QGraphicsScene 中的 QPushButton 需要双击而不是单击

Posted

技术标签:

【中文标题】QGraphicsScene 中的 QPushButton 需要双击而不是单击【英文标题】:QPushButton in QGraphicsScene requires doubleClick instead of single click 【发布时间】:2018-06-05 09:49:54 【问题描述】:

当我有 qGraphicsScene 时,我需要有人解释一下

void myGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent* event)
 qDebug()<<event->scenePos();

我在 qGraphicsScene 中有 qPushButton 和

myGraphicsScene::myGraphicsScene()
QPushButton* pushButton = new QPushButton();
addWidget(pushButton);
connect(pushButton, SIGNAL(clicked()), this,SLOT(doSomething()))

当我点击按钮时:

qDebug 告诉我位置。 连接被忽略。

当我双击按钮时:

qDebug 显示位置 “线程 0x15b4 已退出,代码为 0(0x0)” doSomething() 函数将被触发。

谁能解释一下语义?谢谢。

【问题讨论】:

这是因为你的mousePressEvent被别人消费了。 【参考方案1】:

Qt 文档中的mousePressEvent:

默认实现取决于场景的状态。如果有 是一个鼠标抓取器项,然后将事件发送到鼠标抓取器。 否则,它被转发到接受的最顶层可见项 来自事件的场景位置的鼠标事件,以及该项目 立即成为鼠标抓取项目。

因此,如果您像在代码中那样重新实现它,则该事件不再发送到鼠标抓取器(您的按钮),但是当您双击时,此事件不会被 mousePressEvent 捕获(但通常由 mouseDoubleClickEvent 捕获)并且该按钮仅被激活一次,因为忽略了第一次鼠标按下以检测它是简单单击还是双击。

希望这会对你有所帮助。


更新:要解决您的问题,只需将 mouseMoveEvent 更改为:

void mousePressEvent(QGraphicsSceneMouseEvent* event)
    qDebug()<<event->scenePos();
    QGraphicsScene::mousePressEvent(event);

但我建议你继承 QGraphicsView 并重载他的方法 mousePressEvent。

希望这对你有帮助。

【讨论】:

当然。现在对我来说很清楚了。如果我想知道点击光标在场景上的位置和正常的单键点击功能,你建议什么解决方案? 我更新了我的答案。不要忘记将您的问题标记为已解决。

以上是关于QGraphicsScene 中的 QPushButton 需要双击而不是单击的主要内容,如果未能解决你的问题,请参考以下文章

QGraphicsScene 中的 QPushButton 需要双击而不是单击

QGraphicsScene 中的视觉像素完美选择

QGraphicsScene,PyQt中的图像显示不正确

在 QGraphicsView/QGraphicsScene 中移动 QGraphicsProxyWidget 中的嵌入式小部件

Qt中的QGraphicsScene等对象的坐标系是怎么设置的

Qt中的QGraphicsScene等对象的坐标系是怎么设置的