我正在尝试使用动态属性更改 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 中遇到了同样的问题。 SO 上找到的建议都不起作用,但最终起作用的是使用样式表的级联性质。在我的应用程序中,我有一个应用程序范围的样式表,当按钮处于
checked
: 时,它会以不同的方式设置按钮的样式
QToolButton {
background-color: #12313F;
background: #12313F;
color: #DEE8EC;
spacing: 0px;
border: none
}
QToolButton[checked="true"] {
background-color: #5B8AA1;
background: #5B8AA1;
}
这被设置为主要样式表,这是 python,但希望它能传达这个想法(我正在将样式表作为 style.css 中的字符串读取):
mainwindow.setStyleSheet(
pkg_resources.resource_stream(__name__, 'style.css').read())
在我的代码中,工具栏的 QAction 子项的
checked
属性可能会更改,然后我希望工具栏更新并突出显示该按钮。
为了实现这一点(经过大量的试验和错误),我覆盖了工具栏对象的样式表,该对象是主窗口的子窗口。事实证明我什至不需要设置任何东西,一个空字符串就足够了:
toolbar.setStyleSheet("")
瞧,工具栏正确呈现。 QT 4.8。 YMMV 在 C++ 中,但希望它能起作用。
与 C++ 相同的体验,在创建器中设置的 Qt.6.6 更高级别样式表对组件 QLabel 没有影响,直到我为单个 QLabel 添加了 setStyleSheet("") 。样式表“”与代码中的属性同时设置