Spec-Zone.ru › Qt

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

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

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

Spec-Zone.ru

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