有没有办法阻止工具栏的隐藏操作?

时间:2009-03-16 15:23:23

标签: c++ qt qtoolbar

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

5 个答案:

答案 0 :(得分:25)

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

toolbar->setContextMenuPolicy(Qt::PreventContextMenu);

答案 1 :(得分:17)

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

答案 2 :(得分:9)

覆盖QMainWindow :: createPopupMenu(),例如

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

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

答案 3 :(得分:6)

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

<强> 1。停用toggleViewActionQToolBar

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&amp; 3非常脏,解决方案1显示上下文菜单中的工具栏,如QDockWidget设置了功能DockWidgetClosable。所以要么使用解决方案1,要么想要删除动作,请看看史蒂文的答案。

答案 4 :(得分:1)

继承QToolbar并重新实现contextMenuEvent()