Как Qt выбирает стиль по умолчанию?

В приложении Qt GUI QApplication::style()->objectName() вернет текущий стиль, например «windowsvista».

Как / где он выбирает этот стиль по умолчанию и какую информацию он использует для принятия решения?

0

Решение

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 файл в следующем порядке:

  1. Переопределение стиля, если установлено переменной окружения QT_STYLE_OVERRIDE (это установлено в QApplicationPrivate::process_cmdline());
  2. Стиль возвращается QApplicationPrivate::desktopStyleKey() (этот метод загружает список стилей из текущей темы платформы и выбирает имя из этого списка, которое присутствует в QStyleFactory::keys() список);
  3. Первый пункт в QStyleFactory::keys() список.

Если стиль не может быть определен, метод вернет 0 после подтверждения

Q_ASSERT(!"No styles available!");
1

Другие решения

В документации:

Qt содержит набор подклассов QStyle, которые эмулируют стили
различные платформы, поддерживаемые Qt (QWindowsStyle, QMacStyle и т. д.).

Вы можете установить стиль, используя клавишу: windowsvista например, fusion, macintoshи т. д. При использовании любого ключа возвращаемый стиль будет подклассом QStyle. В зависимости от используемой вами платформы у вас будет доступ к определенному количеству ключей.

Как / где он выбирает этот стиль по умолчанию

Это сделано в QStyleFactory источник файл. Вы также можете посмотреть исходный код QStyle файл чтобы понять, что происходит.

какую информацию он использует, чтобы решить

Стиль по умолчанию зависит от платформы, и затем вы можете выбрать любой стиль из имеющихся на этой платформе клавиш.

1

По вопросам рекламы [email protected]