Qt 动态更改样式表

Qt 动态更改样式表,qt,qtstylesheets,Qt,Qtstylesheets,我正在尝试使用动态属性更改QLabel的样式,因为我们可以在QSS中以如下方式定位此属性: QLabel[foo = "warning"]{ color: red; } QLabel[foo = "success"]{ color: green; } 当我使用QApplication::setStyleSheet()时,标签的样式会更新,但当我更改属性的值时,标签的样式似乎不起作用 label = new QLabel( this ); label->setText( "some tex

我正在尝试使用动态属性更改QLabel的样式,因为我们可以在QSS中以如下方式定位此属性:

QLabel[foo = "warning"]{ color: red; }
QLabel[foo = "success"]{ color: green; }
当我使用
QApplication::setStyleSheet()
时,标签的样式会更新,但当我更改属性的值时,标签的样式似乎不起作用

label = new QLabel( this );
label->setText( "some text" );
label->setProperty( "foo", "warning");

// after some event
label->setProperty( "foo", "success" );
// the label's color should be green now

是我遗漏了什么,还是样式更改不能以这种方式工作?

无论在哪里更改属性,我们都需要添加以下代码来触发更新

label->setProperty("foo", "success");
label->style()->unpolish(label);
label->style()->polish(label);
label->update();

今天在PyQT中遇到了同样的问题。在上发现的任何建议都不起作用,但最终起作用的是使用样式表的级联特性。在我的应用程序中,我有一个应用程序范围的样式表,当选中按钮时,它们的样式会有所不同:

QToolButton {
    background-color: #12313F;
    background: #12313F;
    color: #DEE8EC;
    spacing: 0px;
    border: none
}

QToolButton[checked="true"] {
    background-color: #5B8AA1;
    background: #5B8AA1;
}
这被设置为主样式表,这是python,但希望它能让人理解(我从style.css中以字符串形式阅读样式表):

在我的代码中,工具栏的QAction子项的
checked
属性可能会更改,然后我希望工具栏更新并突出显示该按钮

为了实现这一点(经过了大量的尝试和错误),我覆盖了工具栏对象的样式表,它是主窗口的子窗口。事实证明,我甚至不必设置任何内容,一个空字符串就足够了:

toolbar.setStyleSheet("")
等等,工具栏渲染正确。QT 4.8。YMMV在C++中,但希望它能工作。< /P>这可能是一个很好的PYQT例子:
toolbar.setStyleSheet("")