3

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

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

4

2 回答 2

2

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

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

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

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

const QStringList styles = QStyleFactory::keys();
for(QString s : styles)
{
    qDebug() << s;
}

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

如何选择默认样式?

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

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

如果无法确定样式,则该方法将在断言后返回 0

Q_ASSERT(!"No styles available!");
于 2018-01-04T14:25:35.280 回答
1

在文档中:

Qt 包含一组 QStyle 子类,它们模拟 Qt 支持的不同平台的样式(QWindowsStyle、QMacStyle 等)。

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

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

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

它使用什么信息来决定

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

于 2018-01-04T14:00:40.853 回答