如何在Qt中通过setStyleSheet()添加样式而不丢失orignal样式?

时间:2014-05-06 08:49:08

标签: qt qtstylesheets

我知道我可以使用 setStyleSheet()在Qt中设置样式。但是我遇到了一个问题,当我使用 setStyleSheet()两次时首先丢失了样式,这是首先使用 setStyleSheet()设置。

例如

setStyleSheet("QLabel{color:red;}");

............

setStyleSheet("QLabel{border-image:url(……)}")

当我设置border-image时,红色属性丢失。

我尝试使用

来解决它

setStyleSheet(styleSheet()+QString("QLabel{border-image:url(……)}"));

但是只有border-image属性存在。

我必须在使用setStyleSheet()时添加每个样式属性,尽管我之前设置过它。

感谢您带着我可怜的书面英语。我们将不胜感激。

3 个答案:

答案 0 :(得分:6)

您可以设置没有QLabel标记的样式表:

setStyleSheet("color:red;");

设置一个样式表属性后,您可以添加另一个属性,如:

setStyleSheet( styleSheet().append(QString("border-image:url(……);")) );

答案 1 :(得分:5)

这是对您对已接受答案的评论的回应。

您可以通过将常量值设置为父级来阻止覆盖样式表属性(允许父级样式也不会动态更改)。仅将使用C ++更改的值设置为子项。

parentWidget->setStyleSheet( "QLabel#yourLabel { color:red; }" );
yourLabel->setStyleSheet( "QLabel { border-image:url(...) };" );

当您更改窗口小部件的样式表时,这将保留在窗口小部件上设置的所有父属性。

此外,这消除了非常大的字符串的情况,这在接受的答案中是可能的。频繁的更改会无法有效地将字符串附加到先前定义的不会使用的样式。

答案 2 :(得分:0)

在第二个条目中使用双列。

ui->pushButton_2->setStyleSheet(
            "QPushButton{background-color:red;color:white}\
             QPushButton::hover{color:black}");