Виджеты окна и диалогаВиджет, который не встроен в родительский виджет, называется окном. (Обычно окна имеют рамку и строку заголовка, хотя возможно создание окон без таких украшений (используя соответствующие флаги окна). В 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() и возможностей оконного менеджера надлежащим образом расположить окно, и то, и другое не может быть гарантировано. |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |