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

wat*_*erd 5 qt qtstylesheets

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

例如,

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

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

setStyleSheet("QLabel{border-image:url(……)}")
Run Code Online (Sandbox Code Playgroud)

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

我试着通过使用来解决它

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

但是只有border-image属性存在才一样.

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

谢谢你带着我可怜的书面英语.任何提示将不胜感激.

Nej*_*jat 7

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

setStyleSheet("color:red;");
Run Code Online (Sandbox Code Playgroud)

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

setStyleSheet( styleSheet().append(QString("border-image:url(……);")) );
Run Code Online (Sandbox Code Playgroud)


小智 6

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

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

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

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

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