【问题标题】:Stylesheet Performance Hits with QtQt 对样式表性能的影响
【发布时间】:2013-08-13 18:53:45
【问题描述】:

我想知道加载样式表是否可以比在 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,其他导入方法,......)或通过线程?

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

谢谢。 祝你有美好的一天:)

【问题讨论】:

标签: qt stylesheet execution-time qtstylesheets


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    找到这个方法:

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

    而不是:

    this->setStyleSheet(css);
    

    速度非常快! (0-1 毫秒 vs 150-200 毫秒)

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

    【讨论】:

    • 那是真的,但这与您提出的问题无关,因为要使 Polish()/unpolish() 正常工作,您需要在之前应用 CSS ......并且这只适用于动态属性..但那是真的,这是可能的解决方案之一......
    • 我已经在初始化时加载了 CSS 的动态属性,但我的问题是我每次都必须使用旧方法重新应用我的样式表。对不起,我的问题不够清楚。这就是为什么我试图找到一种更快的方式来导入样式表。
    • 他想应用样式表。你的回答忽略了这一点。
    【解决方案3】:

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

    我强烈建议尽量限制 CSS 的使用,或者至少在设计它们时要仔细考虑......

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

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

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

    【讨论】:

      【解决方案4】:

      在 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

      【讨论】:

        猜你喜欢
        • 2019-05-01
        • 1970-01-01
        • 2013-08-30
        • 2021-03-09
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多