Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Июнь 15, 2014, 14:14



Название: Роль QMainWindow
Отправлено: Igors от Июнь 15, 2014, 14:14
Добрый день

На OSX приложение работает без QMainWindow, т.к. никакой смысловой нагрузки оно не несет. Меню приложения на OSX и так есть, скрыть/показать все окна - хоть из меню, хоть с клавишей.

Но вот наступило портирование на злосчастное Вындоуз - а тут так нельзя. Надо куда-то поселить меню - значит надо создавать QMainWindow (а как иначе?). Ну и окна (по крайней мере все немодальные) должны быть внутри QMainWindow, чтобы можно было свернуть приложение. Теперь им нельзя поставить флаг Qt::Window, придется фокусы отслеживать самому и.т.п.  :'( Не смертельно, но неприятно. Можно ли как-то всего этого избежать? (вряд ли, но может все-таки...)

Спасибо


Название: Re: Роль QMainWindow
Отправлено: Bepec от Июнь 15, 2014, 14:26
Ммм... Вот тут вам и нужно QMainWindow или виджет, его заменяющий. Можно вообще не мучаться и перенести функционал на Windows - меню в верху экрана появляющееся при активации любого окна приложения.

Меню можно и самому использовать, насколько я помню QMenuBar.

Всё таки разные ОС и подходы к работе, увы.


Название: Re: Роль QMainWindow
Отправлено: mitrich от Июнь 15, 2014, 14:42
QMainWindow обеспечивает главным образом поддержку докабельных тулбаров и панелек.

Надо куда-то поселить меню - значит надо создавать QMainWindow (а как иначе?).
QMenuBar - такой же потомок QWidget как скажем QPushButton - заселяй куда хочешь.
См. также QMenuBar::nativeMenuBar для соответствия Маковской концепции меню.

Ну и окна (по крайней мере все немодальные) должны быть внутри QMainWindow, чтобы можно было свернуть приложение. Теперь им нельзя поставить флаг Qt::Window
Флаг Qt::Window ставить можно. Чтобы при сворачивании главного окна сворачивались все остальные, надо просто установить им главное как parent.


Название: Re: Роль QMainWindow
Отправлено: Igors от Июнь 15, 2014, 15:08
QMainWindow обеспечивает главным образом поддержку докабельных тулбаров и панелек.
??? Просветите какие до/после кабельные (не слышал о таком)

QMenuBar - такой же потомок QWidget как скажем QPushButton - заселяй куда хочешь.
См. также QMenuBar::nativeMenuBar для соответствия Маковской концепции меню.
Так а куда если любое окно может быть закрыто? И что смотреть?
Цитировать
The currently supported platforms are Mac OS X and Windows CE. On these platforms if this property is true, the menubar is used in the native menubar and is not in the window of its parent, if false the menubar remains in the window. On other platforms the value of this attribute has no effect.

Флаг Qt::Window ставить можно. Чтобы при сворачивании главного окна сворачивались все остальные, надо просто установить им главное как parent.
Так они все равно свободно перемещаются "вне парента" - выглядит странно.


Название: Re: Роль QMainWindow
Отправлено: gil9red от Июнь 15, 2014, 15:14
QMainWindow обеспечивает главным образом поддержку докабельных тулбаров и панелек.
??? Просветите какие до/после кабельные (не слышал о таком)

QDockWidget :)


Название: Re: Роль QMainWindow
Отправлено: Igors от Июнь 15, 2014, 16:11
QDockWidget :)
А смысл? Это или "прилипалка" или опять-таки "независимое" окно - что может показываться вне парента


Название: Re: Роль QMainWindow
Отправлено: Bepec от Июнь 15, 2014, 16:22
Это прилипалка, могущая быть отдельным окном, но не существующая без папы :)

Я вам предлагаю сделать виджет, который будет нести в себе управляющие функции и меню для всех окон - наподобие общего меню в OSX :) Просто выбираешь окно вашего приложения и оп - вверху/сбоку/снизу экрана появляется панель с меню и кнопками "свернуть, развернуть, закрыть".


Название: Re: Роль QMainWindow
Отправлено: gil9red от Июнь 15, 2014, 16:23
"докабельных", "док.." -- "Dock"
Вот и все, что я пытался сообщить, вам Igors, ведь по вашим словам, вы не слышали об таком :)


Название: Re: Роль QMainWindow
Отправлено: Igors от Июнь 15, 2014, 16:53
"докабельных", "док.." -- "Dock"
Вот и все, что я пытался сообщить, вам Igors, ведь по вашим словам, вы не слышали об таком :)
А! Теперь понял  :)

Я вам предлагаю сделать виджет, который будет нести в себе управляющие функции и меню для всех окон - наподобие общего меню в OSX :) Просто выбираешь окно вашего приложения и оп - вверху/сбоку/снизу экрана появляется панель с меню и кнопками "свернуть, развернуть, закрыть".
Ну это "слишком смело"  :)


Название: Re: Роль QMainWindow
Отправлено: Bepec от Июнь 15, 2014, 17:11
Просто если MDI делать, то уже без MainWindow никуда.
А если MDI не делать, то ничего не остаётся, кроме как делать управляющий виджет.