在我的应用程序中,我想设置 QTabBar 元素的选定选项卡的样式。我的风格只是它的背景颜色,但每次我更改其背景颜色属性时,所有其他样式都会立即丢失。 起初我认为这只是 background-color 的问题,但是后来尝试了更多我注意到即使通过更改选项卡的边距,所有其他样式也会丢失。其他标签的背景颜色设置为透明,填充和边框也会丢失。
我认为QT行为的正确方法应该是保持未触及我未明确修改的属性,但是为了这种明显的行为不被实现,必须有其他原因或我遗漏了一些东西。
这是一个真正的“错误”还是在尝试设置标签样式时我没有考虑过?
答案 0 :(得分:2)
我相信您遇到的问题是,一旦您改变了GUI元素的样式,Qt就无法再使用您的操作系统的本机控件来绘制它。
当您更改任何类型的本机窗口小部件(选项卡,组合框等)的样式时,您应该准备手动控制该窗口小部件的每个方面的样式,因为您说您不想要它看起来像一个原生的小部件,Qt必须使用不同的底层绘画系统来渲染小部件。
答案 1 :(得分:0)
@Mario以及Chris已经说过的关于CSS样式覆盖本机操作系统样式的内容: 任何CSS样式的应用都会有效地调用
QWidget::setStyleSheet(const QString & styleSheet)
目标QWidget上的。这将使用包含新styleSheet的QString覆盖先前设置的styleSheet css;小部件然后重置自己并解析新工作表。 Qt不够聪明,无法检测新样式表将影响哪些部分样式(以及它不会影响),此外,CSS不支持切换是否应用特定属性。 Qt需要添加删除功能以及添加CSS属性,以便在一个Widget上分层多个样式表工作(并且您还可能需要'RemoveAllStyling()'函数)。