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

How to prevent default context menu on QGraphicsTextItem?

是否可以防止右键单击打开 QGraphicsTextItem 上的默认上下文菜单? "Undo, Redo, Cut, Copy, Paste.." 的菜单。在 Ubuntu 18.04,即。我不知道这在 Windows.

上的表现如何

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

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();
}