Qt и собственные меню

Поддерживает ли Qt взаимодействие с собственной строкой меню произвольного окна (например, QWidget) в Windows и Linux?

Похоже, что Qt рассматривает меню как еще один дочерний виджет, который нужно поместить в родительское окно. То есть, чтобы иметь строку меню, я должен зарезервировать для нее место в клиентской области окна. Это не имеет смысла на Mac с его меню в верхней части экрана. В винде смысла мало - меню в том виде, в котором оно реализовано системой, находится за пределами клиентской области. Не уверен, что такое нативная модель в Linux.


person Seva Alekseyev    schedule 28.11.2010    source источник


Ответы (1)


Qt поддерживает родные меню на Mac и в Windows. При взгляде на формы в Qt Designer может показаться, что меню Qt на Mac нестандартны, но это не так. Qt приложил немало усилий, чтобы справиться с различиями в меню между поддерживаемыми платформами, и они работают очень хорошо.

person WolfgangP    schedule 28.11.2010
comment
Хорошо знать. Итак, как мне назначить родную строку меню окна или получить к ней доступ? setMenuBar() определен только для QLayout и QMainWindow, а не для универсального QWidget. - person Seva Alekseyev; 29.11.2010
comment
Меню возможно только для QLayout/QMainWindow. Если вам нужно контекстно-зависимое меню для виджета, добавьте QAction через QWidget::addAction и установите QWidget::setContextMenuPolicy(Qt::ActionsContextMenu). - person WolfgangP; 29.11.2010
comment
Почему? Каждый QWidget может быть окном верхнего уровня. Каждое окно верхнего уровня может иметь меню в Windows. - person Seva Alekseyev; 29.11.2010