[Следующая: Главное окно приложения]
Окна и диалоги приложения
Виджет, который не встроен в родительский виджет, называется окном. Обычно окна имеют рамку и строку заголовка, хотя возможно создание окон без таких украшений (используя соответствующие флаги окна). В Qt QMainWindow и разнообразные подклассы QDialog являются наиболее распространёнными типами окон.
В приложениях окна предоставляют пространство экрана, в котором создаётся пользовательский интерфейс. Окна визуально отделяют одно приложение от другого и обычно предоставляют украшения окна, которые позволяют пользователю изменять размер и расположение приложений в соответствии со своими предпочтениями. Обычно окна интегрированы в окружение рабочего стола и отчасти управляются системой управления окнами, которую предоставляет окружение рабочего стола. Например, выделенные окна приложения отображаются в панели задач.
Первичные и вторичные окна
Любой QWidget, у которого нет родителя, становится окном и на большинстве платформ будет представлен в панели задач рабочего стола. Обычно такое желательно только для одного окна приложения, первичного окна.
Кроме того, QWidget, у которого имеется родитель, может стать окном путем установки флага Qt::WA_Window. В зависимости от системы управления окнами такие вторичные окна обычно располагаются сверху своего родительского окна и не имеют своего пункта в панели задач.
Классы QMainWindow и QDialog устанавливают в своём конструкторе флаг Qt::WA_Window, поскольку они спроектированы для использования в качестве окон и предоставляют возможности, которые не нужны в дочерних виджетах.
Главные окна и диалоги
Главное окно приложения предоставляет каркас для создания главного пользовательского интерфейса приложения, и создано наследованием от QMainWindow. QMainWindow имеет свою компоновку, в которую можно добавить панель меню, панель инструментов, присоединяемые виджеты и строку состояния. В центральной области могут располагаться QWidget различного вида.
Диалоговые окна используются как вторичные окна, которые отображаются пользователю с опциями и вариантами выбора. Диалоги создаются через подклассы QDialog и используя виджеты и компоновки для реализации пользовательского интерфейса. Кроме того, Qt предоставляет некоторое количество готовых стандартных диалогов, которые можно использовать для выполнения стандартных задач, таких как выбор файла или шрифта.
И главные окна, и диалоги можно создавать с помощью Qt Designer, визуального инструмента разработки Qt. Использовать Qt Designer немного быстрее, чем кодирование вручную, и делает тестирование различных идей легче. Создание проектов визуально и чтение кода, сгенерированного uic, - отличный способ изучать Qt!
Геометрия окна
QWidget обеспечивает несколько функций, позволяющих работать с геометрией окна. Некоторые из них работают только с клиентской областью окна (т.е. окном без рамки), другие включают и рамку. Различия осуществляются таким образом, чтобы покрыть наиболее используемые случаи применения прозрачности.
Помните, что украшения действуют только для виджетов верхнего уровня. Для всех виджетов-потомков геометрия области рамки совпадает с таковой у клиента.
Эта диаграмма показывает наиболее используемые функции в действии:
Особенности X11
В X11 окно не имеет рамки, пока оконный менеджер не украсит его. Это происходит асинхронно в какой-то момент времени после вызова QWidget::show() и первого события отрисовки окна или не происходит вообще. Помните, что X11 являются ориентированными на свободную политику (другие называют это гибкостью). Таким образом, вы не можете делать какие-либо предположения относительно безопасной отрисовки рамки в том окне, которое вы получаете. Основное правило: всегда найдётся такой пользователь, который использует менеджер окон, нарушающий вашу реализацию и который будет вам по этому поводу жаловаться.
Кроме того, инструментарий не может просто расположить окно на экране. Всё, что может сделать Qt, - послать сообщение оконному менеджеру. Оконный менеджер, являясь отдельным процессом, может подчиниться, проигнорировать или же отработать с ошибкой. Из-за частичного непонятного руководства Inter-Client Communication Conventions Manual (ICCCM), размещение окон обрабатывается по-разному в существующих оконных менеджерах.
X11 не обеспечивает никаких лёгких средств по получению размеров рамки когда окно украшено. Qt решает эту проблему эвристической обработкой и умным кодом, который работает с наиболее используемыми на сегодняшний день оконными менеджерами. Не удивляйтесь, если обнаружите однажды, что QWidget::frameGeometry() возвращает неверные результаты.
В X11 также не предусмотрен способ развёртывания окна на весь экран. QWidget::showMaximized() эмулирует эту функциональность. Его результат зависит от QWidget::frameGeometry() и возможностей оконного менеджера надлежащим образом расположить окно, и то, и другое не может быть гарантировано.
[Следующая: Главное окно приложения]
Авторские права © 2010 Nokia Corporation и/или её дочерние компании |
Торговые марки |
Qt 4.6.4 |
|