在Qt中,如果我右键单击工具栏,将显示允许我隐藏工具栏的菜单。我需要禁用此功能,因为我不希望工具栏可以隐藏。有没有办法做到这一点?
答案 0 :(得分:25)
只要我使用Qt::PreventContextMenu
或Qt::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。停用toggleViewAction
的QToolBar
:
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()
。