Spec-Zone.ru › Qt 5.6

Окна и диалоговые виджеты

Виджет, не вложенный в родительский виджет, называется окном. (Обычно окна имеют рамку и строку заголовка, хотя также можно создать окна без такой декорации с помощью соответствующих флагов окна). В Qt, QMainWindow и различные подклассы QDialog — самые распространённые типы окон.

В приложениях окна предоставляют пространство на экране, на котором строится пользовательский интерфейс. Окна визуально разделяют приложения друг от друга и обычно предоставляют декорацию окна, позволяющую пользователю изменять размер и положение приложений по своему усмотрению. Окна обычно интегрированы в среду рабочего стола и в некоторой степени управляются системой управления окнами, предоставляемой средой рабочего стола. Например, выбранные окна приложения отображаются в панели задач.

Основные и дополнительные окна

Любой QWidget, у которого нет родителя, станет окном и, на большинстве платформ, будет отображаться в панели задач рабочего стола. Обычно это нужно только для одного окна в приложении, основного окна.

Кроме того, QWidget, имеющий родителя, может стать окном путём установки флага Qt::Window. В зависимости от системы управления окнами, такие дополнительные окна обычно размещаются поверх соответствующего родительского окна и не имеют собственной записи в панели задач.

Класс QMainWindow устанавливает флаг Qt::Window в своём конструкторе, так как он предназначен для использования в качестве окна и предоставляет функции, которые не нужны для дочерних виджетов.

Главные окна и диалоги

Главное окно приложения предоставляет фреймворк для создания основного пользовательского интерфейса приложения и создаётся путём наследования от QMainWindow. QMainWindow имеет собственное макетирование, в которое вы можете добавить строку меню, панели инструментов, прикрепляемые виджеты и строку состояния. Центральную область может занимать любой виджет QWidget.

Диалоговые окна используются в качестве дополнительных окон, которые предоставляют пользователю варианты и возможности выбора. Диалоги создаются путём наследования от QDialog и использования виджетов и макетов для реализации пользовательского интерфейса. Кроме того, Qt предоставляет ряд готовых стандартных диалогов, которые могут использоваться для стандартных задач, таких как выбор файла или шрифта.

Как главные окна, так и диалоги можно создавать с помощью Qt Designer, визуального инструмента разработки Qt. Использование Qt Designer намного быстрее, чем ручная настройка кода, и упрощает тестирование различных дизайнерских идей. Визуальное создание дизайна и чтение кода, сгенерированного uic, — отличный способ изучить Qt!

Геометрия окна

QWidget предоставляет несколько функций, которые обрабатывают геометрию виджета. Некоторые из этих функций работают с чистой клиентской областью (т.е. окном без рамки), другие включают рамку окна. Различие выполняется таким образом, чтобы прозрачно охватить наиболее распространённое использование.

  • Включая рамку окна: x(), y(), frameGeometry(), pos() и move().
  • Исключая рамку окна: geometry(), width(), height(), rect() и size().

Обратите внимание, что это различие имеет значение только для декорированных верхних виджетов. Для всех дочерних виджетов геометрия рамки равна геометрии клиентской области виджета.

На этом рисунке показано использование большинства функций:

Geometry diagram

Особенности X11

В X11 у окна нет рамки, пока менеджер окон его не декорирует. Это происходит асинхронно в какой-то момент после вызова QWidget::show() и первого события рисования, которое получает окно, или это вообще не происходит. Имейте в виду, что X11 не имеет политики (другие называют это гибким). Таким образом, вы не можете сделать никаких безопасных предположений о рамке декорации, которую получит ваше окно. Основное правило: всегда найдётся пользователь, который использует менеджер окон, нарушающий ваше предположение, и который пожалуется вам.

Кроме того, среда разработки не может просто разместить окна на экране. Всё, что может сделать Qt, — это отправить определённые подсказки менеджеру окон. Менеджер окон, отдельный процесс, может либо выполнить их, проигнорировать, либо неправильно понять. Из-за частично неясных правил взаимодействия между клиентами (ICCCM) размещение окон обрабатывается довольно по-разному в существующих менеджерах окон.

X11 не предоставляет стандартного или простого способа получения геометрии рамки после декорирования окна. Qt решает эту проблему с помощью изящных эвристик и остроумного кода, который работает с широким спектром существующих менеджеров окон. Не удивляйтесь, если вы найдёте такой, где QWidget::frameGeometry() вернёт неправильные результаты.

Кроме того, X11 не предоставляет способа максимализировать окно. QWidget::showMaximized() должен эмулировать эту функцию. Результат зависит от результата QWidget::frameGeometry() и способности менеджера окон правильно размещать окна, ни одно из которых нельзя гарантировать.

Особенности BlackBerry

На платформе BlackBerry можно установить альтернативное окно-обложку, которое отображается при минимизации приложения. Окно-обложка должно быть отдельным окном с установленным флагом Qt::CoverWindow.

Окно должно иметь фиксированный размер, зависящий от разрешения экрана (например, для экрана 768x1280, 334 пикселя в ширину и 396 пикселей в высоту). Окно можно отрисовывать как обычно, однако обновления должны происходить очень редко (не более нескольких обновлений в минуту), чтобы экономить заряд батареи.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/application-windows.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API