如何通过 setStyleSheet() 添加样式而不丢失 Qt 中的原始样式?

Posted

技术标签:

【中文标题】如何通过 setStyleSheet() 添加样式而不丢失 Qt 中的原始样式?【英文标题】:How to add style via setStyleSheet() without losing orignal style in Qt? 【发布时间】:2014-06-22 18:58:15 【问题描述】:

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

例如

setStyleSheet("QLabelcolor:red;");

…………

setStyleSheet("QLabelborder-image:url(……)")

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

我尝试通过使用来解决它

setStyleSheet(styleSheet()+QString("QLabelborder-image:url(……)"));

但同样只有border-image属性存在。

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

感谢您忍受我糟糕的英语写作。任何提示将不胜感激。

【问题讨论】:

【参考方案1】:

第二个条目使用双列。

ui->pushButton_2->setStyleSheet(
            "QPushButtonbackground-color:red;color:white\
             QPushButton::hovercolor:black");

【讨论】:

【参考方案2】:

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

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

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

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

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

【讨论】:

这在使用 Qt Designer 时也适用。当必须通过代码更改小部件时,我个人对样式的偏好是将 Qt Designer 中的常量值设置为具有相应小部件类型标签和对象名称标签的父级。只需使用第二行代码设置给child,之前的属性不会丢失。 感谢您这么久的回答。设置代码样式是一个很好的规则。 我自己试图找到一个优雅的解决方案,偶然发现了你的问题。我看到您在几个月前的几年后再次发表评论,所以我想为可能遇到相同情况的其他人添加一个替代解决方案。干杯【参考方案3】:

您可以设置不带 QLabel 标签的样式表:

setStyleSheet("color:red;");

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

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

【讨论】:

但是当我必须使用像QPushButton:pressed 这样的样式时它不起作用。有没有更好的方法来解决?

以上是关于如何通过 setStyleSheet() 添加样式而不丢失 Qt 中的原始样式?的主要内容,如果未能解决你的问题,请参考以下文章

关于样式表setStyleSheet

QT +样式表

11Qt样式表

如何设置QPushButton背景透明样式如QLabel

TabWidget修改tab颜色,自定义样式

qt 样式表基本用法