在Qt GUI应用程序中,
它是如何选择默认样式的?它使用了哪些信息来做决定?
QApplication::style()->objectName()
会返回当前样式,例如"windowsvista"。它是如何选择默认样式的?它使用了哪些信息来做决定?
QApplication::style()->objectName()
会返回当前样式,例如"windowsvista"。Qt自带内置样式,它们是(在我的5.9.2版本中):
每个样式都有自己的类,派生自QStyle
。
要查看可用的样式(这取决于Qt的构建配置):
const auto & styles = QStyleFactory::keys();
for(const auto & s : styles)
{
qDebug() << s;
}
如果有自定义插件(即QTDIR/plugins/styles目录中的库),如果存在,也会显示出来。
默认样式是如何选择的?
在qapplication.cpp文件中,通过搜索QApplication方法style()
,按照以下顺序查找默认样式:
QT_STYLE_OVERRIDE
设置了风格覆盖,则使用该覆盖;QApplicationPrivate::desktopStyleKey()
返回的样式(此方法从当前平台主题加载样式列表,并从该列表中选择第一个名称存在于QStyleFactory::keys()
列表中的名称);QStyleFactory::keys()
列表中的第一项。如果无法确定样式,则函数将断言。
Q_ASSERT(!"No styles available!");
windowsvista
、fusion
、macintosh
等。当使用任何键时,返回的样式将是QStyle的子类。根据您使用的平台,您将可以访问一定数量的键。