[英]Qt Stylesheet management and performances
我对Qt样式表的管理有疑问。
我有一个很大的Qt应用程序,可以动态更改其颜色主题。 为此,我创建了多个样式表(一个主题表-它们很大)。 当用户想要更改颜色主题时,他单击一个按钮,该按钮调用MainWindow
的QWidget
方法setStylesheet(QString)
。 这实际上有效,但是我的GUI在此过程中冻结了8-10秒。
为了减少延迟,我尝试使用unpolish(QApplication * application)
和QStyle::polish(QApplication * application)
。 性能相当出色(不到一秒钟),但是一些Widget
属性没有更新,例如QToolButton
的icon属性。 而且,即使我的所有自定义窗口小部件都继承自常见的窗口小部件类( QFrame
, Qwidget
, QStackedWidget
等),也不会更新。 我会用polish
法错过什么吗? 还有另一种方法可以更好地更新我的应用程序样式吗?
您可以使用setPalette ( QPalette )
void QApplication::setPalette ( const QPalette & palette, const char * className = 0 ) [static]
将默认应用程序调色板更改为调色板。
可以根据QStyle :: polish()中的当前GUI样式更改调色板。
警告:请勿将此功能与Qt样式表一起使用。 使用样式表时,可以使用“颜色”,“背景颜色”,“选择颜色”,“选择背景颜色”和“替代背景颜色”来自定义窗口小部件的调色板。
注意:例如,某些样式如果使用本机主题引擎,则不会对所有图形使用调色板。
如果要从一个位置更改所有小部件的主题,这是一种好方法。
我在大型应用程序中使用了它,并且运行良好。
但是,如果您将styleSheet或选用板设置为窗口小部件,则不会获得一般主题。
QPalette myPalette;
myPalette.setColor(QPalette::Background, Qt::red);
myPalette.setColor(QPalette::WindowText, QColor(150, 150, 150));
qApp->setPalette(myPalette);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.