【问题标题】:How to prevent default context menu on QGraphicsTextItem?如何防止 QGraphicsTextItem 上的默认上下文菜单?
【发布时间】:2019-08-20 20:19:01
【问题描述】:

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

我已经覆盖了鼠标按下处理程序以在我的视图中吃右键单击,并尝试在项目类本身中执行此操作。这实际上确实阻止了 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;
}

【问题讨论】:

    标签: c++ qt qt5 qgraphicsview qgraphicsscene


    【解决方案1】:

    你必须重写 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();
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 2013-07-21
      • 1970-01-01
      • 2012-05-06
      • 2019-11-21
      • 2017-12-22
      • 1970-01-01
      • 2013-06-23
      • 2017-11-08
      相关资源
      最近更新 更多