如何通过setStyleSheet()添加样式而不丢失Qt中的原始样式?
我知道我可以使用setStyleSheet()在Qt中设置样式。但是我遇到了一个问题,当我使用setStyleSheet()两次丢失第一个样式时,第一次使用setStyleSheet()设置了这些样式 对于exmaple如何通过setStyleSheet()添加样式而不丢失Qt中的原始样式?,qt,qtstylesheets,Qt,Qtstylesheets,我知道我可以使用setStyleSheet()在Qt中设置样式。但是我遇到了一个问题,当我使用setStyleSheet()两次丢失第一个样式时,第一次使用setStyleSheet()设置了这些样式 对于exmaple setStyleSheet(“QLabel{color:red;}”) setStyleSheet("QLabel{border-image:url(……)}") 设置边框图像时,红色属性丢失。 我试图通过使用 setStyleSheet(styleSheet()+QStr
setStyleSheet(“QLabel{color:red;}”)代码>
setStyleSheet("QLabel{border-image:url(……)}")
设置边框图像时,红色属性丢失。
我试图通过使用
setStyleSheet(styleSheet()+QString(“QLabel{border image:url(…)}”)代码>
但同样的,只有边界图像属性存在
我必须在使用setStyleSheet()时添加每个样式属性,尽管我之前已经设置了它。
感谢您用我糟糕的英文书写。如有任何提示,我们将不胜感激。您可以设置不带QLabel标记的样式表:
setStyleSheet("color:red;");
设置一个样式表属性后,可以添加另一个属性,如:
setStyleSheet( styleSheet().append(QString("border-image:url(……);")) );
这是对您对已接受答案的评论的回应
通过将常量值设置为父项(允许父项的样式也不动态更改),可以防止覆盖样式表属性。只将您用C++更改的值设置为子项。
parentWidget->setStyleSheet( "QLabel#yourLabel { color:red; }" );
yourLabel->setStyleSheet( "QLabel { border-image:url(...) };" );
当您更改小部件的样式表时,这将保留在小部件上设置的所有父属性
此外,这消除了一个非常大的字符串的情况,这在可接受的答案中是可能的。频繁的更改将无效地使用先前定义的样式追加字符串,而这些样式将不被使用。使用双栏作为第二个条目
ui->pushButton_2->setStyleSheet(
"QPushButton{background-color:red;color:white}\
QPushButton::hover{color:black}");
但是当我必须使用像QPushButton:pressed{}
这样的样式时,它就不起作用了。有没有更好的方法来解决这个问题?这同样适用于使用Qt Designer的情况。当小部件必须通过代码更改时,我个人对样式的偏好是使用相应的小部件类型标记和对象名称标记将Qt Designer中的常量值设置为父项。只需使用第二行代码设置为子级,之前的属性不会丢失。感谢您在这么长时间后的回答。这是一条很好的代码风格规则。我自己也在试图找到一个优雅的解决方案,但无意中发现了你的问题。我看到你在几年后,几个月前又发表了评论,所以我想为其他可能遇到同样情况的人添加一个替代解决方案。干杯