c++ - 如何防止 QGraphicsTextItem 上的默认上下文菜单?

标签 c++ qt qt5 qgraphicsview qgraphicsscene

是否可以防止右键单击打开 QGraphicsTextItem 上的默认上下文菜单?带有“撤消、重做、剪切、复制、粘贴...”的菜单。在 Ubuntu 18.04 上,就是这样。我不知道这在 Windows 上的表现如何。

我已经重写了鼠标按下处理程序以在我的 View 中执行右键单击,并尝试在项目类本身中执行此操作。这实际上确实阻止了 Qt 5.10.0 上的菜单,但由于某种原因,在 5.11.1 上不再出现:

enter image description here

void EditorView::mousePressEvent(QMouseEvent * event)
{ 
    if (event->button() == Qt::RightButton)
    {
        return;
    }

    ...
    doOtherHandlingStuff();
    ...
}

在项目本身中,如果我这样做,它不会产生任何效果:

void TextEdit::mousePressEvent(QGraphicsSceneMouseEvent * event)
{
    event->ignore();
    return;
}

最佳答案

您必须重写 QGraphicsTextItem 的 contextMenuEvent 方法:

#include <QtWidgets>

class GraphicsTextItem: public QGraphicsTextItem
{
public:
    using QGraphicsTextItem::QGraphicsTextItem;
protected:
    void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override
    {
        event->ignore();
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QGraphicsScene scene;
    QGraphicsView w{&scene};
    auto it = new GraphicsTextItem("Hello World");
    it->setTextInteractionFlags(Qt::TextEditable);
    scene.addItem(it);
    w.show();
    return a.exec();
}

关于c++ - 如何防止 QGraphicsTextItem 上的默认上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55425085/

相关文章:

c++ - 必须定义 LNK1561 入口点

c++ - 如何拦截 QtWebKit 中的 AJAX 请求?

javascript - js变量定义

c++ - 无法将 C++ 类型注册到 QML 系统

c++ - Visual Studio Community 2015 不显示输出

c++ - malloc 小于 8 字节

c++ - 改变 QMenu 中子菜单的位置

c++ - 在 QCustomplot 中的图形上显示 x 和 y 坐标

c++ - 如何在 QT Creator 中手动运行 CMake 和运行

c++ - glGetIntegerv 返回 36064