在 Qt 中,如果我右键单击工具栏,将显示允许我隐藏工具栏的菜单。我需要禁用此功能,因为我不希望工具栏可能隐藏。有没有办法做到这一点?
5 回答
只要我使用或,我就可以直接在工具栏(而不是主窗口)上设置 ContextMenuPolicy 。消除了上下文菜单并使右键单击对工具栏没有影响,同时制作了一个很好的上下文菜单,由我工具栏中已有的操作组成。似乎没有任何效果。Qt::PreventContextMenu
Qt::ActionsContextMenu
Prevent
Actions
Qt::NoContextMenu
toolbar->setContextMenuPolicy(Qt::PreventContextMenu);
使用setContextMenuPolicy (Qt::NoContextMenu)作为工具栏的主窗口。
覆盖 QMainWindow::createPopupMenu() 例如
QMenu* MyApp::createPopupMenu()
{
QMenu* filteredMenu = QMainWindow::createPopupMenu();
filteredMenu->removeAction( mUnhidableToolBar->toggleViewAction() );
return filteredMenu;
}
请注意,建议禁用上下文菜单的其他答案仅在您要禁用所有工具栏和所有停靠小部件的隐藏/显示时才有效。
有几种方法可以实现这一点,而无需更改 contextMenu 功能。请参阅以下 3 个 PySide 示例:
toggleViewAction
QToolBar
1.禁用:
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 的回答。
继承 QToolbar 并重新实现contextMenuEvent()
.