在Qt中,如果我右键单击工具栏,将显示允许我隐藏工具栏的菜单.我需要禁用此功能,因为我不希望工具栏可以隐藏.有没有办法做到这一点?
Nol*_*Amy 29
我可以直接在工具栏(而不是主窗口)上设置ContextMenuPolicy ,只要我使用Qt::PreventContextMenu或者Qt::ActionsContextMenu.Prevent取消了上下文菜单并右键单击对工具栏没有任何影响,同时Actions创建了一个很好的上下文菜单,由我工具栏中的操作组成.Qt::NoContextMenu似乎没有任何影响.
toolbar->setContextMenuPolicy(Qt::PreventContextMenu);
Ari*_*yat 17
使用setContextMenuPolicy(Qt :: NoContextMenu)作为工具栏的主窗口.
覆盖QMainWindow :: createPopupMenu()例如
QMenu* MyApp::createPopupMenu()
{
QMenu* filteredMenu = QMainWindow::createPopupMenu();
filteredMenu->removeAction( mUnhidableToolBar->toggleViewAction() );
return filteredMenu;
}
Run Code Online (Sandbox Code Playgroud)
请注意,建议禁用上下文菜单的其他答案仅在您要禁用所有工具栏和所有停靠窗口小部件的隐藏/显示时才有效.
有几种方法可以实现这一点,而无需更改contextMenu功能.请参阅以下3个PySide示例:
1.禁用以下toggleViewAction内容QToolBar:
UnhidableToolBar = QToolBar()
UnhidableToolBar.toggleViewAction().setEnabled(False)
Run Code Online (Sandbox Code Playgroud)
2.连接visibilityChanged信号:
toolbar.visibilityChanged.connect(lambda: toolbar.setVisible(True))
Run Code Online (Sandbox Code Playgroud)
3.子类QToolBar并使用hideEvent:
class UnhideableQToolBar(QToolBar):
def hideEvent(self, event):
self.setVisibile(True)
Run Code Online (Sandbox Code Playgroud)
虽然2和3非常脏,但解决方案1在上下文菜单中显示工具栏,就像QDockWidget具有功能DockWidgetClosable集的工具栏一样.因此要么使用解决方案1,要么想要删除动作,请查看Steven的答案.
| 归档时间: |
|
| 查看次数: |
6224 次 |
| 最近记录: |