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 需要双击而不是单击
在 QGraphicsView/QGraphicsScene 中移动 QGraphicsProxyWidget 中的嵌入式小部件