我正在开发一个跨平台的应用程序,它在Windows中看起来比在Ubuntu中糟糕得多。这只与Windows的默认样式表和Ubuntu的样式表有关。有没有一种方法可以获得应用于应用程序的依赖于操作系统的样式表?我试着用检索应用程序样式表
QApplication app(argc, argv);
qDebug() << "Style sheet: " << app.styleSheet();
但这会产生一个空字符串(除非您手动将其设置为某个值(。我的意图是检索Ubuntu样式表并将其保存到一个文件中(并将其添加到资源列表中(,这样我就可以在两个操作系统中为应用程序加载它:
QApplication app(argc, argv);
QFile file(":/ubuntu_style.qss");
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
app.setStyleSheet(styleSheet);
关于如何获得操作系统的默认样式表,有什么想法吗?
我在另一个论坛上找到了答案。我把它张贴在这里,以便将来搜索其他用户。
您可以使用QStyleFactory
获取操作系统默认样式。使用QStyleFactory::key()
可获得可能的样式列表,返回可用关键字列表。在我的情况下,这总是在Windows和Linux操作系统中返回"Windows"
和"Fusion"
。此外,在Windows中,我还拥有"windowsvista"
。使用这个类,我可以设置应用程序主样式:
QApplication app(argc, argv);
app.setStyle(QStyleFactory::create("Fusion"));
因此,无论编译/使用的操作系统是什么,我的应用程序看起来总是一样的。
但是,这并没有提供样式表,而是提供了QStyle
,因此使用app.styleSheet();
会返回一个空字符串。阅读另一个Stack Overflow问题,尤其是对其公认答案的评论,可以更好地理解QStyle
和qt样式表。并得出结论,不可能将QStyle
转换为样式表,因为这些都是在不同层上工作的东西(特别感谢@lcikgl在那里发布的评论(
根据文档,当您没有使用参数-stylesheet
指定有效路径时,stylesheet()
将返回一个空字符串(根据您的情况(。我认为你没有这么做。所以,你需要为你的应用程序添加这个参数。或者,制作自己的qss
文件并将其添加到resources文件夹中。我希望这能帮助你解决问题。