QTabBar元素的::tab样式会导致样式丢失

3
在我的应用程序中,我想要为QTabBar元素的选定选项卡设置样式。我只想要修改其背景颜色,但每次更改背景颜色属性时,所有其他样式都会立即丢失。
起初,我以为这只是针对背景颜色的问题,但后来尝试了更多操作后,发现即使通过更改选项卡的边距,所有其他样式也会丢失。其他选项卡的背景颜色被设置为透明,填充和边框也消失了。
我认为QT正确的行为方式应该是保留我没有明确修改的属性不变,但是为什么没有实现这样一个明显的行为,可能有其他原因或者我忽略了什么。
这是一个实际的“bug”,还是在尝试为选项卡设置样式时有些事情我没有考虑到?
2个回答

2
我认为你遇到的问题是,一旦你更改了GUI元素的样式,Qt就不能再使用您操作系统的本地控件进行绘制。
当您更改任何类型的本地小部件(选项卡、组合框等)的样式时,您应该准备好手动控制该小部件的每个方面的样式,因为您表示不希望它看起来像本地小部件,而Qt必须使用不同的底层绘图系统来渲染小部件。

我曾以为QT总是以相同的方式绘制,但使用从系统中获取的“CSS属性”。好吧,我想应该是这样的。 - user912695
在底层,它们使用本机API调用,使小部件尽可能地看起来原生。 - Chris
使用从系统中获取的“CSS属性” - 如果系统没有提供任何属性,那么它会按照自己的喜好绘制,或者完全自行绘制? - j_kubik
@j_kubik,我认为QT框架应该以某种方式将系统窗口小部件样式转换为适当的CSS属性,并将它们包含在级联中。但很明显现在看来并不是这样。 - user912695

0

@Mario,除了Chris已经提到的CSS样式覆盖本地操作系统样式之外: 任何CSS样式的应用都会有效地调用

QWidget::setStyleSheet(const QString & styleSheet)

在目标QWidget上设置样式表css的QString,这将覆盖先前设置的样式表;然后小部件将重置自身并解析新表。Qt无法智能地检测新样式表将影响哪些小部件样式(以及哪些不会),此外,CSS不支持切换是否应用特定属性。Qt需要添加删除CSS属性的功能,以便在一个小部件上叠加多个样式表(您还可能需要一个'RemoveAllStyling()'函数)。


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