5

我想知道是否可以比在 Qt 应用程序中使用我的方法更快地加载样式表。

这是我的代码:

this->setStyleSheet("background-color : black;");

执行这个简单的 css/qss 样式需要 270 毫秒。

使用此导入方法具有更大的 qss 样式

QFile file("style.qss");  
if(!file.open(QFile::ReadOnly)){  
    qDebug() << "Style QSS file not found";  
}  
css = QString::fromLatin1(file.readAll());  
file.close(); 

这个命令

this->setStyleSheet(css);

花了 330 毫秒,所以考虑到执行的 css 样式块的差异,这还不错。

所以看起来 setStyleShet 命令的 init 很长。我的问题是:有没有办法加速这个命令(不使用 Qstring,其他导入方法,......)或通过线程?

对我来说,这是巨大的,因为我需要经常更新我的样式表,而且它所花费的时间与我执行的所有逻辑一样多。

谢谢。祝你今天过得愉快 :)

4

4 回答 4

3

找到了这个方法:

this->style()->unpolish(this); //"this" is my main window
this->style()->polish(this);
this->update();

代替 :

this->setStyleSheet(css);

它非常快!(0-1 毫秒对比 150-200 毫秒)

解决方案在那里:http: //qt-project.org/doc/qt-4.8/stylesheet-syntax.html#note-233

于 2013-08-21T09:45:03.653 回答
1

在 Linux 中,使用样式表可能会严重影响性能。这里有一些信息:

http://kjellkod.wordpress.com/2011/05/22/moving-to-qt5-will-that-remove-qts-performance-issues-on-linux/

您可以尝试将图形渲染引擎切换为光栅。您可以通过几种不同的方式做到这一点。测试它的最简单方法是在运行应用程序时通过命令行参数设置它:

yourApp -graphicssystem 光栅

要在代码中执行此操作,请使用 API:

http://doc.qt.digia.com/4.5-snapshot/qapplication.html#setGraphicsSystem

于 2013-08-12T17:53:50.447 回答
1

尽管我在 QT 中经常使用 CSS,但我仍然担心在 Qt 中使用大量 CSS 是否正确。

我强烈建议尝试限制 CSS 的使用,或者至少在设计它们时仔细考虑。

特别是对于具有大量控件和复杂布局的复杂应用程序,如果您以跨平台环境为目标,则在使用它们时应该非常小心。例如,如果您需要很好地“绘制”仅针对 Win32 或 MacOSX 的应用程序,这确实是一种非常快速的方法,但是在其他平台上运行相同的 CSS 可能会导致比使用本机控件更丑陋的 UI。

然后你开始研究“每个像素都很重要”的界面,你会发现即使是 Qt 中的基本布局也有错误,并且在顶部 CSS 引擎上添加同样充满“小”错误的可能会导致更不可预测的结果和开发时间。

关于您的问题 - 在应用程序级别设置全局 CSS 是您可以获得的最快的方法,但请记住,它将在所有应用程序小部件中继承,因此如果您需要不同的东西,您必须创建特殊规则。

于 2013-08-12T21:18:03.403 回答
0

我尝试了抛光和非抛光方法,但没有奏效。最后,我尝试qApp->setStyleSheet("style..");了它是否是一个有效的小项目。
您可以参考另一个类似的答案,使用动态样式表作为Ton van den Heuvel回答,并替换pushButton->setStyle(QApplication::style());widget ->setStyle(widget->style())
希望它会有所帮助:)

于 2018-12-03T04:44:28.300 回答