23

在 Qt 中,如果我右键单击工具栏,将显示允许我隐藏工具栏的菜单。我需要禁用此功能,因为我不希望工具栏可能隐藏。有没有办法做到这一点?

4

5 回答 5

34

只要我使用或,我就可以直接在工具栏(而不是主窗口)上设置 ContextMenuPolicy 。消除了上下文菜单并使右键单击对工具栏没有影响,同时制作了一个很好的上下文菜单,由我工具栏中已有的操作组成。似乎没有任何效果。Qt::PreventContextMenuQt::ActionsContextMenuPreventActionsQt::NoContextMenu

toolbar->setContextMenuPolicy(Qt::PreventContextMenu);

于 2012-01-26T08:05:06.303 回答
17

使用setContextMenuPolicy (Qt::NoContextMenu)作为工具栏的主窗口。

于 2009-03-16T17:22:15.590 回答
11

覆盖 QMainWindow::createPopupMenu() 例如

QMenu* MyApp::createPopupMenu()
{
  QMenu* filteredMenu = QMainWindow::createPopupMenu();
  filteredMenu->removeAction( mUnhidableToolBar->toggleViewAction() );
  return filteredMenu;
}

请注意,建议禁用上下文菜单的其他答案仅在您要禁用所有工具栏和所有停靠小部件的隐藏/显示时才有效。

于 2016-05-24T20:59:01.507 回答
11

有几种方法可以实现这一点,而无需更改 contextMenu 功能。请参阅以下 3 个 PySide 示例:

toggleViewActionQToolBar1.禁用:

UnhidableToolBar = QToolBar()
UnhidableToolBar.toggleViewAction().setEnabled(False)

2.连接visibilityChanged信号

toolbar.visibilityChanged.connect(lambda: toolbar.setVisible(True))

3.子类QToolBar化并使用hideEvent

class UnhideableQToolBar(QToolBar):
    def hideEvent(self, event):
        self.setVisibile(True)

推荐:

虽然 2 和 3 很脏,但解决方案 1 在上下文菜单中显示了工具栏,就像QDockWidget具有功能DockWidgetClosable集的工具栏一样。因此,要么使用解决方案 1,要么如果您想删除该操作,请查看 Steven 的回答。

于 2016-10-05T11:10:13.427 回答
3

继承 QToolbar 并重新实现contextMenuEvent().

于 2009-03-16T15:28:34.037 回答