gpt4 book ai didi

c++ - 对 Qt 中的 doubleclickevent 和 mousepressevent 感到困惑

转载 作者:行者123 更新时间:2023-12-03 18:05:34 25 4
gpt4 key购买 nike

情况是:

侧面QGraphicsView ,我用了它的doubleClickEvent创建 QGraphicsItem 的函数.
我重写了QGraphicsItemmousePressEvent函数来简单地打印一个 qDebug信息。

但是,我发现的是:即使我只是双击创建该 QGraphicsItem ,新创建的QGraphicsItemmousePressEvent也被称为。

这怎么会发生?我能做些什么来防止这种情况?

最佳答案

QGraphicsView 是一个小部件,所以它有一个 doubleClickEvent。相比之下,QGraphicsItem 不是小部件,而是具有 mousePressEvent。

当您覆盖事件时,如果您不希望它们传播到其他对象,则需要 accept告诉系统你已经处理了它的事件。

void MyGraphicsView::mouseDoubleClickEvent(QMouseEvent * event)
{
// Create a graphics item..
...
event->accept(); // tell the system that the event has been handled
}

不接受事件,双击被传递到 QGraphicsScene,然后是 QGraphicsItem。

如果您希望在单击场景的空白区域时能够双击创建一个项目,但如果您双击一个项目让项目使用react,您可以覆盖场景的 mouseDoubleClickEvent而不是 View 并在决定是否创建项目或传递事件之前检查光标位置是否有项目。
void QGraphicsScene::mouseDoubleClickEvent( QGraphicsSceneMouseEvent * mouseEvent )
{
if(items(mouseEvent->scenePos()).isEmpty()) // if no items are at this position
{
// create new graphics item
...
mouseEvent->accept(); // don't propagate the event
}

// no items, so allow the event to propagate by doing nothing
}

关于c++ - 对 Qt 中的 doubleclickevent 和 mousepressevent 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26488288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com