QStyleSheet覆盖常规样式

3

我正在尝试更改QComboBox(或几个小部件)的颜色,但似乎当我创建一个仅具有颜色属性的QStyleSheet时,它会覆盖所有其他属性。特别是在Windows上,圆形QComboBox变成了方形,而且非常难看。如下代码片段(注意实际代码中的颜色是生成的。为了方便,只使用黑色和白色)。

QString styleSheet = "QComboBox { background-color: #ffffff; color: #000000 }";
combBox->setStyleSheet( styleSheet );

抱歉这些图片的尺寸有点荒谬。

这是一个普通的、没有样式的QComboBox:

而这是应用上述样式后的QComboBox:


看起来你正在将新样式表设置为唯一要应用的样式表。这确实会删除所有其他样式。相反,尝试将新样式添加到现有样式表中,或者如果无法这样做,请尝试将其作为附加样式表添加,而不是替换旧样式表。 - Tijmen
我该如何添加而不是替换?文档基本上说setStyleSheet就是我唯一的选择。 - kiss-o-matic
我查看了QT文档,其中概述了按钮的此问题,但原则是相同的。如果您修改一个无法通过本机样式解决的属性(就像您在这里所做的那样),则需要为整个元素设置样式,因为所有本机样式都将被忽略。 - Tijmen
是的,这有点残酷 - 我只想改变一个元素。 :| 我猜我可以直接处理调色板。 干杯。 - kiss-o-matic
1个回答

1

您正在使用动态样式表。

参考:https://wiki.qt.io/Dynamic_Properties_and_Stylesheets

在您的代码中尝试使用此方法:

ui->comboBox->setStyleSheet("background-color: rgb(16, 72, 255); color: rgb(255, 17, 80);");

就像将您的样式表附加到小部件样式表中一样。

他没有使用动态属性。你的样式表不安全。它没有范围,可能会影响到该组合框的子元素。 - pat
你能提供安全版本吗?目前,我无法想象这个组合框有子项,但它非常通用。未来肯定会发生这种情况。 - kiss-o-matic
即使应用了它,它仍然呈现出相同的丑陋外观。 - kiss-o-matic
相信我,这是一个安全的方法,程序员们总是使用这种方法。将来如果你为该comboBox创建了子类,只需覆盖这个方法即可。 - Farhad
这实际上并没有解决我的问题 - 无论是否安全,它仍会去除小部件的其他特性,不幸的是。 - kiss-o-matic

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