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

时间:2018-06-05 09:49:55

标签: c++ qt mouseevent signals-slots

当我有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向我展示了职位
  • &#34;线程0x15b4已退出,代码为0(0x0)&#34;
  • doSomething()功能将被解雇。

有人可以解释一下语义吗?感谢。

1 个答案:

答案 0 :(得分:1)

Qt文档中的

mousePressEvent:

  

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

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

希望这会对你有所帮助。

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

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

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

希望这可以帮到你。