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

标签 c++ qt qgraphicsview qgraphicsitem

情况是:

侧面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/

相关文章:

c++ - 公开 QWebView 小部件对象并将其添加到 QML

c++ - 在 QTableView 上绘制 QGraphicsLineItem

qt - 用于 2D RPG 的 QGraphicsView

qt - 如何优化 QGraphicsView 的性能?

java - D 是 Java 和 C++ 的可靠替代品吗?

qt - qmake在交叉编译时添加/usr/lib绝对路径

c++ - Realloc-in 标准分配器

python - 放大鼠标位置 QGraphicsView

c++ - "Right"解除分配 std::vector 对象的方法

c++ - 简单的 getter/accessor 防止矢量化 - gcc 错误?