我正在macOS上开发桌面应用程序。我有一个类是QMainWindow的子类。在此窗口内,有许多dockwidgets。我需要将WindowModality设置为WindowModal,以便用户无法与其他打开的窗口进行交互。但是我的窗口有一个菜单栏,里面有很多带有一些QAction的菜单,当我设置WindowModality(Qt :: WindowModal)时,它会自动禁用菜单中的每个动作,而我需要启用它们。
有人可以为此提供一些简单的解决方案吗?还是不可能?
非常感谢您。
编辑:
我的应用程序中有很多窗口。我有一个真正的主窗口,您可以从中打开另一个窗口,也可以从该窗口中打开另一个窗口。在这种情况下,我需要我的子窗口为模态窗口。但是它们也有自己的菜单栏,当打开窗口模式时会自动禁用它。香港专业教育学院一直在搜索它,可能已经有10个小时没有任何解决方案了。我无法对其进行测试,但我猜想在Windows上菜单栏不会禁用,因为本机菜单完全不同。
答案 0 :(得分:0)
如果没有特别需要使用QWindow
,那么使用QDialog
类可以更轻松地实现这一点。使用QDialog
,您可以使用exec()
方法将对话框显示为模式对话框。
编辑:基本上,您可以使用QMenuBar
方法向每个QLayout
类对象中添加QLayout::setMenuBar
元素。
如果要将菜单栏添加到QDialog
,则必须设置对话框的布局,然后以编程方式创建所需的QMenuBar
对象并将其传递给QDialog
布局(您可以访问使用QDialog::layout
方法)。下面是一个简单的示例:
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
QMenuBar* menu = new QMenuBar();
QMenu* fileMenu = menu->addMenu("File"); //Create 'File' menu inside menu bar
QAction* closeAction = fileMenu->addAction("Close"); //Create 'Close' action in 'File' menu
connect(closeAction, QAction::triggered, this, close); //Close dialog after triggering 'Close' action
layout()->setMenuBar(menu); //Add menu bar to QDialog layout
}
答案 1 :(得分:-1)
请考虑使用Qt :: ApplicationModal。
这保留了模态,但为您提供了MAC上的其他行为。