QT窗口模式会禁用菜单中的操作

时间:2018-08-21 15:00:23

标签: c++ qt menu window modality

我正在macOS上开发桌面应用程序。我有一个类是QMainWindow的子类。在此窗口内,有许多dockwidgets。我需要将WindowModality设置为WindowModal,以便用户无法与其他打开的窗口进行交互。但是我的窗口有一个菜单栏,里面有很多带有一些QAction的菜单,当我设置WindowModality(Qt :: WindowModal)时,它会自动禁用菜单中的每个动作,而我需要启用它们。

有人可以为此提供一些简单的解决方案吗?还是不可能?

非常感谢您。

编辑:

我的应用程序中有很多窗口。我有一个真正的主窗口,您可以从中打开另一个窗口,也可以从该窗口中打开另一个窗口。在这种情况下,我需要我的子窗口为模态窗口。但是它们也有自己的菜单栏,当打开窗口模式时会自动禁用它。香港专业教育学院一直在搜索它,可能已经有10个小时没有任何解决方案了。我无法对其进行测试,但我猜想在Windows上菜单栏不会禁用,因为本机菜单完全不同。

2 个答案:

答案 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上的其他行为。