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

QT Window Modality disables actions in menu

本文关键字:操作 菜单 窗口 模式 QT      更新时间:2023-10-16

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

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

谢谢。

编辑:

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

如果没有使用QWindow的特定需求,那么使用QDialog类会更容易实现这一点。使用QDialog您可以使用exec()方法简单地将对话框显示为模式。

编辑:基本上,您可以使用QLayout::setMenuBar方法将QMenuBar元素添加到每个QLayout类对象。 如果要将菜单栏添加到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
}

请考虑Qt::ApplicationModal的用法。

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