Qt如何选择默认样式?

How does Qt select a default style?

本文关键字:默认 样式 选择 何选择 Qt      更新时间:2023-10-16

在Qt GUI应用程序中,QApplication::style()->objectName()将返回当前样式,例如"windowsvista"。

它如何/在哪里选择此默认样式,以及它使用哪些信息来决定?

Qt带有内置样式,这些是(在我的5.9.2上):

  • 窗户
  • 视窗XP
  • WindowsVista
  • 人造人
  • 融合
  • 麦金塔

每个都有自己的类,派生自QStyle

要查看哪些可用(这取决于Qt构建配置):

const auto & styles = QStyleFactory::keys();
for(const auto & 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()列表中的第一项。

如果无法确定样式,则该函数将断言

Q_ASSERT(!"No styles available!");

在文档中:

Qt包含一组QStyle子类,这些子类模拟了 Qt支持的不同平台(QWindowsStyle,QMacStyle等)。

您可以使用键设置样式:windowsvista例如fusionmacintosh等。使用任何键时,返回的样式将是 QStyle 的子类。根据您使用的平台,您将可以访问一定数量的密钥。

它如何/在哪里选择此默认样式

它是在QStyleFactory源文件中完成的。您还可以查看QStyle源文件以了解正在发生的事情。

它使用什么信息来决定

默认样式取决于平台,然后您可以在此平台上根据自己的配置在键中选择任何样式。