Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何防止QGraphicsTextItem上的默认上下文菜单?_C++_Qt_Qt5_Qgraphicsview_Qgraphicsscene - Fatal编程技术网

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

C++ 如何防止QGraphicsTextItem上的默认上下文菜单?,c++,qt,qt5,qgraphicsview,qgraphicsscene,C++,Qt,Qt5,Qgraphicsview,Qgraphicsscene,是否可以防止右键单击打开QGraphicsTextItem上的默认上下文菜单?“撤消、重做、剪切、复制、粘贴…”菜单。在Ubuntu 18.04上,就是这样。我不知道这在Windows上的表现 我已经在视图中重写了鼠标按下处理程序来执行右键单击,并尝试在item类本身中也这样做。这实际上阻止了Qt5.10.0上的菜单,但由于某种原因,不再是5.11.1上的菜单: 在项目本身中,如果我这样做,则不会产生任何效果: void TextEdit::mousePressEvent(QGraphicsS

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

我已经在视图中重写了鼠标按下处理程序来执行右键单击,并尝试在item类本身中也这样做。这实际上阻止了Qt
5.10.0
上的菜单,但由于某种原因,不再是
5.11.1
上的菜单:

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

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();
}
#包括
GraphicsTextItem类:公共QGraphicsTextItem
{
公众:
使用QGraphicsTextItem::QGraphicsTextItem;
受保护的:
无效contextMenuEvent(QGraphicsContextMenuEvent*事件)重写
{
事件->忽略();
}
};
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QsCENE场景;
QGraphicsView{&scene};
auto it=新的GraphicsTextItem(“Hello World”);
它->setTextInteractionFlags(Qt::TextEditable);
场景。附加项(it);
w、 show();
返回a.exec();
}
#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();
}