Как Qt выбирает стиль по умолчанию?
В приложении Qt GUI QApplication::style()->objectName()
вернет текущий стиль, например "windowsvista".
Как / где он выбирает этот стиль по умолчанию и какую информацию он использует для принятия решения?
2 ответа
Qt поставляется со встроенными стилями, это (на моем 5.9.2):
- Windows
- Windows XP
- Виндоус виста
- Android
- сплавление
- макинтош
каждый из которых имеет свой собственный класс, производный от QStyle
,
Чтобы увидеть, какие из них доступны (это зависит от конфигурации сборки Qt):
const QStringList styles = QStyleFactory::keys();
for(QString s : styles)
{
qDebug() << s;
}
Пользовательские плагины (т.е. библиотеки в каталоге QTDIR/plugins/styles) также будут показаны, если они есть.
Как выбрать стиль по умолчанию?
Стиль по умолчанию ищется в QApplication
метод style()
в файле qapplication.cpp в следующем порядке:
- Переопределение стиля, если установлено переменной окружения
QT_STYLE_OVERRIDE
(это установлено вQApplicationPrivate::process_cmdline()
); - Стиль возвращается
QApplicationPrivate::desktopStyleKey()
(этот метод загружает список стилей из текущей темы платформы и выбирает имя из этого списка, которое присутствует вQStyleFactory::keys()
список); - Первый пункт в
QStyleFactory::keys()
список.
Если стиль не может быть определен, метод вернет 0 после подтверждения
Q_ASSERT(!"No styles available!");
В документации:
Qt содержит набор подклассов QStyle, которые эмулируют стили различных платформ, поддерживаемых Qt (QWindowsStyle, QMacStyle и т. Д.).
Вы можете установить стиль, используя клавишу: windowsvista
например, fusion
, macintosh
и т. д. При использовании любого ключа возвращаемый стиль будет подклассом QStyle. В зависимости от используемой вами платформы у вас будет доступ к определенному количеству ключей.
Как / где он выбирает этот стиль по умолчанию
Это делается в исходном файле QStyleFactory. Вы также можете посмотреть исходный файл QStyle, чтобы понять, что происходит.
какую информацию он использует, чтобы решить
Стиль по умолчанию зависит от платформы, и затем вы можете выбрать любой стиль из имеющихся на этой платформе клавиш.