【问题标题】:Qt Stylesheet management and performancesQt 样式表管理和性能
【发布时间】:2014-12-03 13:04:46
【问题描述】:

我对 Qt 样式表的管理有疑问。

我有一个可以动态更改其颜色主题的大型 Qt 应用程序。为此,我创建了几个样式表(一个按主题 - 它们非常大)。当用户想要更改颜色主题时,他单击一个按钮,该按钮调用MainWindowQWidget 方法setStylesheet(QString)。这确实有效,但我的 GUI 在此过程中冻结了 8-10 秒。

为了减少延迟,我尝试使用unpolish(QApplication * application)QStyle::polish(QApplication * application)。性能相当令人印象深刻(不到一秒),但几个 Widget 属性没有更新,例如QToolButton 的图标属性。此外,我所有的自定义小部件都不会更新,即使它们继承自常见的小部件类(QFrameQwidgetQStackedWidget 等)。 我错过了polish 方法吗?还有其他方法可以更好地更新我的应用程序的样式吗?

【问题讨论】:

    标签: css qt stylesheet


    【解决方案1】:

    你可以使用setPalette(QPalette)

    void QApplication::setPalette ( const QPalette & palette, const char * className = 0 ) [static]
    

    将默认应用程序调色板更改为调色板。

    调色板可以根据当前的 GUI 样式在 QStyle::polish()。

    警告:不要将此函数与 Qt 样式表一起使用。 使用样式表时,可以自定义小部件的调色板 使用“颜色”、“背景颜色”、“选择颜色”, “选择背景颜色”和“替代背景颜色”。

    注意:有些样式并非所有绘图都使用调色板,因为 例如,如果他们使用原生主题引擎。

    如果您想从一个地方更改所有小部件的主题,这是个好方法。
    我在大型应用程序中使用它,它运行良好。

    但是,如果您将 styleSheet 或调色板设置为小部件,则它不会获得您的一般主题。

    QPalette myPalette;
    myPalette.setColor(QPalette::Background, Qt::red);
    myPalette.setColor(QPalette::WindowText, QColor(150, 150, 150));
    qApp->setPalette(myPalette);
    

    【讨论】:

    • 是的,但这代表了很多工作。我被 css 文件困住了,我必须使用它们。还是谢谢。
    • @AlJah:你说得对,当我从 stylSheet 切换到 QPalette 时,我需要一个多星期的时间。欢迎您。
    猜你喜欢
    • 2013-08-13
    • 2017-05-28
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多