Qt 如何选择默认样式?

OJW*_*OJW 5 c++ qt qstyle qapplication

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

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

p-a*_*l-o 5

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

  • 视窗
  • 视窗XP
  • Windows Vista
  • 安卓
  • 融合
  • 麦金塔

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

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

const auto & styles = QStyleFactory::keys();
for(const auto & s : styles)
{
    qDebug() << s;
}
Run Code Online (Sandbox Code Playgroud)

自定义插件(即 QTDIR/plugins/styles 目录中的库)也会显示(如果存在)。

默认样式是如何选择的?

默认样式在qapplication.cppQApplication文件的method中搜索,按以下顺序:style()

  1. 样式覆盖,如果由环境变量设置QT_STYLE_OVERRIDE(在 中设置QApplicationPrivate::process_cmdline());
  2. 返回的样式QApplicationPrivate::desktopStyleKey()(此方法从当前平台主题加载样式列表,并从该列表中选择列表中存在的第一个名称QStyleFactory::keys());
  3. 列表中的第一项QStyleFactory::keys()

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

Q_ASSERT(!"No styles available!");
Run Code Online (Sandbox Code Playgroud)