Как вы получаете доступ к меню с помощью QMenuBar?

Как в 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, если это имеет значение.

Почему за это проголосовали? это очевидная вещь, которую нужно сделать, что кажется невозможным в Qt API, похоже, должен быть вопрос StackOverflow, охватывающий это.

jwezorek 04.04.2022 02:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

QMenu добавляется в QMenuBar внутренне через QWidget::addAction(menu->menuAction()) (см. <QtInstallPath/src\widgets\widgets\qmenubar.cpp>. Из QWidget вы можете получить добавленные QActions с помощью QWidget::actions() - метода, который возвращает список связанных QActions. В вашем конкретном примере menuBar()->actions() должен получить как минимум два действия для ваших меню.

Однако, похоже, нет способа вернуться из QMenu::menuAction()-созданного QAction обратно в соответствующее меню. Поэтому вам может понадобиться хранить указатель на созданные вами объекты QMenu самостоятельно.

ах, да, я не знал, что у меню верхнего уровня есть действия, связанные с ними. QMenu действительно не нужен, так как я могу включить/отключить действие.

jwezorek 03.04.2022 21:11

Другие вопросы по теме