QT Window Modality отключает действия в меню

Я разрабатываю настольное приложение на macOS. У меня есть класс, который является подклассом QMainWindow. Внутри этого окна много док-виджетов. Мне нужно установить WindowModality на WindowModal, чтобы пользователь не мог взаимодействовать с другими открытыми окнами. Но в моем окне есть меню с множеством меню, в которых есть некоторые QActions, и когда я устанавливаю setWindowModality (Qt :: WindowModal), оно автоматически отключает все действия в меню, и мне нужно, чтобы они были включены.

Кто-нибудь может предложить какое-то простое решение для этого? Или это не возможно?

Большое спасибо.

РЕДАКТИРОВАТЬ:

У меня есть много окон в моем приложении. У меня есть настоящее главное окно, из которого вы можете открыть другое окно, а также из этого окна другое окно. И вот ситуация, когда мне нужно, чтобы мои дочерние окна были модальными. Но у них также есть своя собственная строка меню, которая автоматически отключается при включении модальности окна. Я уже 10 часов гуглял без решения. Я не могу проверить это, но я предполагаю, что на окнах меню не будет отключено, потому что родное меню совсем другое.

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
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]