c++ - 如何防止 QGraphicsTextItem 上的默认上下文菜单?
问题描述
是否可以防止右键单击打开默认上下文菜单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;
}
解决方案
你必须重写 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();
}
推荐阅读
- javascript - 在选择框中动态生成选项
- java - 图像在设备上消失但在 android studio 预览中显示
- oracle - 运行 dbms_stats.gather_table_stats 时统计信息是否可用
- maven - 在 Eclipse Luna 中创建一个 Maven 项目抱怨“无法解析原型”
- java - Java - 将响应时间从 Android Studio 传递到“phpmyadmin”
- javascript - 填充反应组件导致“TypeError:无法读取未定义的属性'map'”
- android - 如何在使用 android studio 的音频播放器中保存音频播放器的当前播放时间,即 1:45/25:40?
- elasticsearch - 如何使用索引名称备份 s3 存储桶中的 aws elasticsearch 索引?
- scylla - Scylladb 是否需要与数据集一样多的内存?
- c# - 在安装项目中执行 InstallerClass 的 Roolback 事件时找不到 installstate 错误