Внутренние элементы Qt GUI - рисование виджетов? - PullRequest
4 голосов
/ 24 марта 2009

Я уже некоторое время использую QT, и мне было интересно кое-что относительно того, как графический интерфейс отображается в Windows.
Действительно ли он рисует все кнопки, поля редактирования, поля со списком, флажки, вкладки и т. Д. Самостоятельно, используя QPainter, или это как-то использует родные виджеты?

Тот факт, что он может выполнять пользовательские стили и обложки, предполагает, что он на самом деле рисует все, используя QPainter, но как можно поддерживать этот вид кода? Действительно ли разработчики Qt перепроектировали всю функциональность оконной системы? разве это не расточительно?
Еще одним свидетельством этого является то, что если я использую Spy ++ в графическом интерфейсе Qt, то все окна отображаются с именем класса, равным «QWidget». Если бы он использовал нативные виджеты, не должны ли они быть "BUTTON", "STATIC" и т. Д.?

А как на других платформах? То же самое и в Max OSX?

Ответы [ 3 ]

7 голосов
/ 24 марта 2009

В Windows XP и Vista (за исключением случаев, когда в настройках дисплея установлено значение Classic), рисование виджетов с помощью QWindowsXPStyle и QWindowsVistaStyle фактически использует низкоуровневый характерный для темы рисунок (uxtheme) .dll) так что например кнопка выглядит как родная. В более старых версиях Windows Qt эмулирует рисование виджетов через QWindowsStyle .

Ситуация аналогична в Mac OS X, где QMacStyle полагается на Appearance Manager для делегирования низкоуровневого рисования виджетов.

Для X11 обычно Qt использует свой собственный стиль рисования и имеет определенные стили, которые имитируют некоторую оконную систему, например QMotifStyle имеет сходный внешний вид с Motif, но фактически не загружается и зависит от среды Motif. Однако при работе в GNOME, опционально, Qt может использовать собственную тему Gtk + через QGtkStyle .

4 голосов
/ 24 марта 2009

Документация QWindowsXPStyle содержит следующее:

"Предупреждение. Этот стиль доступен только на платформе Windows XP, поскольку в нем используется движок стилей Windows XP."

На странице Qt Wikipedia есть следующее:

"Использование собственных интерфейсов рендеринга пользовательского интерфейса

Qt использовался для эмуляции собственного внешнего вида предполагаемых платформ, что иногда приводило к небольшим расхождениям, когда эта эмуляция была несовершенной. В последних версиях Qt используются собственные API различных платформ для рисования элементов управления Qt, и поэтому они не страдают от таких проблем. [24] (См. Также wxWidgets, который использует собственные API для большинства функций виджетов.) "

1 голос
/ 21 июля 2009

Qt действительно рисует все виджеты сам (независимо от того, используется ли API для создания тем на платформе или «сырой» GDI / X / etc), это не имеет значения). Если бы он использовал нативные виджеты (как это делает wxWindows), было бы почти невозможно подключиться к стилю, чтобы изменить даже мельчайшие детали, не говоря уже о готовом виджете для добавления пользовательских функций сверху.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...