【发布时间】:2018-06-14 01:20:28
【问题描述】:
在 Qt GUI 应用程序中,QApplication::style()->objectName() 将返回当前样式,例如“windowsvista”。
它如何/在哪里选择这种默认样式,以及它使用什么信息来决定?
【问题讨论】:
标签: c++ qt qapplication qstyle
在 Qt GUI 应用程序中,QApplication::style()->objectName() 将返回当前样式,例如“windowsvista”。
它如何/在哪里选择这种默认样式,以及它使用什么信息来决定?
【问题讨论】:
标签: c++ qt qapplication qstyle
Qt 带有内置样式,这些是(在我的 5.9.2 上):
每个都有自己的类,派生自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 源file 中完成。您还可以查看 QStyle 源 file 以了解正在发生的事情。
它使用什么信息来决定
默认样式是平台相关的,然后您可以在此平台上根据您的配置在键中选择任何样式。
【讨论】: