Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt的样式表性能_Qt_Stylesheet_Execution Time_Qtstylesheets - Fatal编程技术网

Qt的样式表性能

Qt的样式表性能,qt,stylesheet,execution-time,qtstylesheets,Qt,Stylesheet,Execution Time,Qtstylesheets,我想知道是否有可能比在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";

我想知道是否有可能比在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(); 
耗时330毫秒,所以考虑到执行的css样式块的差异,这并不是那么糟糕

所以看起来setStyleShet命令的init非常长。 我的问题是:有没有一种方法可以加速这个命令(不使用Qstring、其他导入方法等)或线程化

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

谢谢。
祝您度过愉快的一天:)

在Linux中,使用样式表可能会严重影响性能。以下是一些信息:

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

yourApp-图形系统光栅

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


虽然我在QT中经常使用CSS,但我仍然担心扩展CSS在QT中是否正确

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

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

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

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

找到此方法:

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

this->setStyleSheet(css);
速度快得难以置信!(0-1毫秒vs 150-200毫秒)


解决方案就在那里:

我尝试了抛光和未抛光的方法,但没有奏效。最后,我尝试了
qApp->setStyleSheet(“style..”)如果是一个小项目,它就成功了。
您可以使用动态样式表作为tonvandenheuvelanswered进行引用,并替换
按钮->设置样式(QApplication::style())通过
小部件
->设置样式(小部件->样式())


希望它能有所帮助:)

制作一个动态样式表可能就是你想要的。这是真的,但这与你问的问题无关,因为要使polish()/unpolish()有效,你需要在之前应用CSS。。这只适用于动态属性。。但这是真的,这是可能的解决方案之一……我已经在init中加载了CSS的动态属性,但我的问题是每次都必须使用旧方法重新应用样式表。对不起,我的问题不够清楚。这就是为什么我试图找到一种更快的方式来导入样式表。
this->setStyleSheet(css);