动态更改样式表

7

我想使用动态属性来更改我的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

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

可能是Qt的样式表真的处理动态属性吗?的重复问题。 - Dmitry Sazonov
2个回答

28

1
这是一个很好的PyQt示例:http://dgovil.com/blog/2017/02/24/qt_stylesheets/ - bicarlsen
链接无法使用。 - Thombou

1
今天在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("")

现在,工具栏已经正确地呈现出来了。在C++中使用QT 4.8时可能会有所不同,但希望它能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接