Как в Qt восстановить меню с заполненным QMenuBar
?
Они не кажутся дочерними элементами строки меню. Например, после следующего (где функции создания меню завершаются успешно и делают то, что вы ожидаете)
menuBar()->addMenu(create_file_menu(this));
menuBar()->addMenu(create_view_menu(this));
auto children = menuBar()->children();
auto first_child = children[0];
children
заканчивается размером 1, и этот дочерний элемент first_child
является некоторым объектом типа QMenuBarExtension
. Я ожидал получить двух дочерних элементов, первым из которых будет меню файла.
Я использую Qt6, если это имеет значение.
QMenu добавляется в QMenuBar внутренне через QWidget::addAction(menu->menuAction())
(см. <QtInstallPath/src\widgets\widgets\qmenubar.cpp>.
Из QWidget вы можете получить добавленные QActions с помощью QWidget::actions()
- метода, который возвращает список связанных QActions. В вашем конкретном примере menuBar()->actions()
должен получить как минимум два действия для ваших меню.
Однако, похоже, нет способа вернуться из QMenu::menuAction()
-созданного QAction обратно в соответствующее меню. Поэтому вам может понадобиться хранить указатель на созданные вами объекты QMenu самостоятельно.
ах, да, я не знал, что у меню верхнего уровня есть действия, связанные с ними. QMenu действительно не нужен, так как я могу включить/отключить действие.
Почему за это проголосовали? это очевидная вещь, которую нужно сделать, что кажется невозможным в Qt API, похоже, должен быть вопрос StackOverflow, охватывающий это.