QT如何移除操作菜单项

3

当我将小部件添加到主窗口时,默认情况下,操作菜单项将存在,如何删除它?

menuBar()->setVisible(false);

verAction = new QAction(tr("&Version"),this);
menuBar()->addAction(verAction);
connect(verAction, SIGNAL(triggered()),this, SLOT(displayVersion()));

displayAction = new QAction(tr("&Display"),this);
menuBar()->addAction(displayAction);


 connect(displayAction, SIGNAL(triggered()),this, SLOT(displayMessage()));

exitAction = new QAction(tr("&Exit"),this);
menuBar()->addAction(exitAction);
connect(exitAction, SIGNAL(triggered()),this, SLOT(close()));

谢谢

3个回答

2
为了移除标签为“Actions”的默认上下文菜单,可以使用以下代码:
// Remove context menu from the all widgets.
QWidgetList widgets = QApplication::allWidgets();
QWidget* w=0;
foreach(w,widgets) {
    w->setContextMenuPolicy(Qt::NoContextMenu);
}

本质上与 Joel 的回答相同,但是这里是代码版本 :)

(代码取自论坛.nokia.com的 QFriendFeed 示例)


2

我明白您的意思……您想隐藏默认上下文菜单 "Actions"....

您可以在设计部分中完成此操作(不需编写代码)。

然后,您将在右侧看到对象堆栈,例如:

  • MainWindow QMainWindow
    • centralWidget QWidget
      • webView QWebView

现在,转到下面的属性编辑器......搜索 "contextMenuPolicy" 并将其从 "DefaultContextMenu" 更改为每个组件的 "NoContextMenu"(如果需要)。


2
如果你想要隐藏一个QAction并在需要时显示它,你可以使用setVisible函数。
如果你想要从QMainWindow中移除菜单栏,你可以使用QT_NO_MENUBAR预处理器来移除所有QMenuBar的使用。如果你没有使用QMainWindow提供的工具,或许你可以在你的应用程序中使用一个简单的QWidget作为主窗口。
[编辑] 如果你想要在运行时隐藏QActions,你可以在QMainWindow的UI成员中找到它们。例如,如果你有一个名为actionTest的QAction,你可以这样访问它:this->ui->actionTest->setVisible(false);

好的..如何获取 QAction 菜单项的访问权限呢?.. 我将从菜单中获取操作列表。如果我遍历它,它不会只给出 Action 菜单..那该怎么办呢? - Naruto
1
你想要做什么? - Patrice Bernassola
我想从菜单栏中删除Qaction菜单..有什么方法吗? 要使其可见,我们需要访问它..我们不知道该怎么做? - Naruto
看到编辑了。但我不确定你的工作目标是什么。你是想在菜单栏中动态显示QActions吗? - Patrice Bernassola
如果您想以后按照自己的意愿使用它,那么必须跟踪您的操作。将verAction、displayAction和exitAction作为类的成员,这样您可以随时访问它们(不要忘记所有权归菜单栏所有,您不能删除它们)。另一种方法是查找菜单栏的子项名称。请阅读此文档http://doc.trolltech.com/qq/qq03-big-brother.html#finding.children - Patrice Bernassola
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接