当我有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
向我展示了职位doSomething()
功能将被解雇。有人可以解释一下语义吗?感谢。
答案 0 :(得分:1)
mousePressEvent:
默认实现取决于场景的状态。如果有 是一个鼠标抓取项,然后将事件发送到鼠标抓取器。 否则,它将被转发到最接近的可见项目 来自事件的场景位置和该项目的鼠标事件 迅速成为鼠标抓取项目。
因此,如果您像在代码中那样重新实现它,则事件不再发送到鼠标抓取器(您的按钮),但是当您双击时,mousePressEvent(但通常由mouseDoubleClickEvent)捕获此事件并且该按钮仅被激活一个,因为忽略第一次鼠标按下以检测它是单击还是双击。
希望这会对你有所帮助。
更新:要解决您的问题,只需将您的mouseMoveEvent更改为:
void mousePressEvent(QGraphicsSceneMouseEvent* event){
qDebug()<<event->scenePos();
QGraphicsScene::mousePressEvent(event);
}
但我建议你继承QGraphicsView并重载他的方法mousePressEvent。
希望这可以帮到你。