【问题标题】:Styling ::tab of a QTabBar element results in style loseQTabBar 元素的样式 ::tab 会导致样式丢失
【发布时间】:2011-10-09 21:22:44
【问题描述】:

在我的应用程序中,我想为 QTabBar 元素的选定选项卡设置样式。我设置的样式只是它的background-color,但是每次我改变它的background-color属性,其他所有的样式都会立即丢失。 起初我认为这只是 background-color 的问题,但后来尝试更多时,我注意到即使更改选项卡的边距,所有其他样式都丢失了。其他标签的background-color设置为透明,填充和边框也丢失了。

我认为 QT 的正确行为方式应该是保留我没有明确修改的属性,但是对于不实施这种明显的行为,必须有其他原因,或者我遗漏了一些东西。

这是一个实际的“错误”还是我在尝试设置标签样式时没有考虑到什么?

【问题讨论】:

    标签: qt tabs styling


    【解决方案1】:

    我相信您遇到的问题是,一旦您更改了 GUI 元素的样式,Qt 就无法再使用您操作系统的本机控件来绘制它。

    当您更改任何类型的原生小部件(选项卡、组合框等)的样式时,您应该准备好手动控制该小部件的各个方面的样式,因为您说您不想要它看起来不再像原生小部件,Qt 必须使用不同的底层绘画系统来渲染小部件。

    【讨论】:

    • 我认为 QT 总是以相同的方式绘制,但使用从系统中获取的“CSS 属性”。嗯,我猜应该是这样的。
    • 在后台,他们使用原生 API 调用使小部件看起来尽可能原生。
    • 使用从系统中获取的“CSS 属性”——如果系统不提供任何属性会怎样——要么它会随意绘制,要么完全自己绘制?
    • @j_kubik,我认为 QT 框架应该能够以某种方式将系统小部件样式转换为适当的 CSS 属性并将它们包含在级联中。但显然现在看来这不会发生。
    【解决方案2】:

    @Mario 以及 Chris 已经说过的关于 CSS 样式覆盖本机操作系统样式的内容: 任何 CSS 样式的应用都会有效地调用

    QWidget::setStyleSheet(const QString & styleSheet)
    

    在目标 QWidget 上。这会用包含新 styleSheet 的 QString 覆盖先前设置的 styleSheet css;然后小部件会自行重置并解析新工作表。 Qt 不够聪明,无法检测到您的新样式表会影响小部件样式的哪些部分(以及不会影响哪些部分),除此之外,CSS 不支持切换是否应用特定属性。 Qt 需要添加删除功能以及添加 CSS 属性,以便在一个 Widget 上分层多个样式表才能工作(您可能还需要一个“RemoveAllStyling()”函数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 2018-03-28
      • 2020-11-29
      • 2021-04-28
      • 2018-05-13
      • 1970-01-01
      相关资源
      最近更新 更多