【问题标题】:Qt: Style depending on label valueQt:样式取决于标签值
【发布时间】:2021-06-17 00:45:53
【问题描述】:

我有一个看起来非常简单的问题:我想设计一个 QLabel,它的值会动态变化(这里没有问题)并且其背景颜色会相应地变化(这就是问题所在)。

当然,我知道我可以做这样的事情(伪代码):

function on_new_value(value):
    label.setText(value)
    if value>10:
        label.setBackgroundColor(RED)
    else if value<0:
        label.setBackgroundColor(RED)
    else:
        label.setBackgroundColor(GREEN)

但这种混合模型和视图。理想情况下,我希望能够使用 Qt 样式表的扩展版本,如下所示:

QLabel { background: green; }
QLabel { if value>10: background: red; }
QLabel { if value<0: background: red; }

显然,这是不可能的。但我想知道 Qt 是否允许基于值嵌入(例如在类中)图形行为。

我知道 QPalette,但样式条件仅与小部件的 Active/Disable 状态有关,而不是它的“值”。

换句话说,我正在寻找某种ValueDependantStyle 类或类似的东西。

有什么建议吗?我看错了吗?

编辑:如果这很重要,我正在使用 PyQt5 进行开发。

【问题讨论】:

  • 如果您真的想将样式和模型分开,您可以将 QLabel 扩展到您自己的类中并在类中设置样式。这是你要找的吗?
  • 我会这样做,但是在完整的应用程序中,有几个 QLabels 并且它们的值依赖样式是由用户动态创建的。所以我无法对样式进行硬编码,但我正在寻找一种可以承载它的结构,最好是以与 Qt 兼容的方式。

标签: qt qstyle


【解决方案1】:

您可以在标签上使用“模型属性”,它定义样式表中的颜色(参见Qt Style Sheet Reference 关于属性):

function on_new_value(value):
    label.setText(value)
    if value>10:
        label.setProperty("HasError", "true")
    else if value<0:
        label.setProperty("HasError", "true")
    else:
        label.setProperty("HasError", "false")
QLabel[HasError="false"] { background: green; }
QLabel[HasError="true"] { background: red; }

【讨论】:

    猜你喜欢
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2020-01-03
    • 2022-08-17
    • 1970-01-01
    • 2020-03-03
    相关资源
    最近更新 更多