0

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

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

非常感谢。

编辑:

我的应用程序中有很多窗口。我有一个真正的主窗口,您可以从中打开另一个窗口,也可以从该窗口打开另一个窗口。这是我需要我的子窗口成为模态的情况。但他们也有自己的菜单栏,当打开窗口模式时会自动禁用。我已经在谷歌上搜索了 10 个小时,但没有任何解决方案。我无法测试它,但我猜在 Windows 上菜单栏不会禁用,因为本机菜单完全不同。

4

2 回答 2

0

如果没有特别需要 using QWindow,那么QDialog改用 using 类会更容易实现。使用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
}
于 2018-08-21T15:07:07.657 回答
-1

请考虑 Qt::ApplicationModal 的使用。

这会保留模式,但会在 MAC 上为您提供其他行为。

于 2019-09-05T06:34:29.397 回答