【问题标题】:Qt Stylesheet syntax: targeting a specific button, not ALL buttonsQt Stylesheet 语法:针对特定按钮,而不是所有按钮
【发布时间】:2011-06-22 22:47:26
【问题描述】:

我有一个带有两个按钮的窗口。

我想用不同的样式表来装饰每一个。当然,它们都有不同的对象名称,但似乎只有通用的 QPushButton 样式表选择器有效。

我试过了:

QPushButton#myBtnObjectName1 {

/* style definitions */

}
QPushButton#myBtnObjectName2 {

/* style definitions */

}

尝试将# 替换为.,或仅使用#myBtnObjetNameX。没有任何效果。只是:

QPushButton {
/* style definitions */
}

我是否使用了错误的语法?或者如果不从代码中的QPushButton 派生并为每个类使用单独的类名,这是否根本不可能?

【问题讨论】:

  • 我是否必须在 QT-Designer 中的“ObjectName”以外的地方定义对象名称?
  • 如何以及在何处应用样式表很重要?
  • 在构建过程中:QFile 文件(stylesheetURL); file.open(QFile::ReadOnly); QString styleSheet = QLatin1String(file.readAll()); setStyleSheet(styleSheet);
  • 在某些小部件(哪一个)或应用程序范围内(QApplication)?
  • #objectName 在 Qt 5.8 中似乎可以正常工作。

标签: qt qtstylesheets


【解决方案1】:

要使用objectName 匹配实例,您还可以使用选择器^=。根据standard

[att^=val] 表示具有 att 属性的元素,其值 以前缀“val”开头。

Qt 中的示例:

QPushButton[objectName^="push"] { background-color: red; }

将匹配名为 pushButtonQPushButton,但不会匹配名为 pbt 的对象。

【讨论】:

    【解决方案2】:

    您可以为此在 Qt Designer 中使用“accessibleName”。 在 qss 样式表中:

    更通用:

    [accessibleName="alert-error"] {
        color: red;
    }
    

    或更具体:

    QPushButton[accessibleName="bigred"] {
       background-color: red;
    }
    

    【讨论】:

    • 我认为这是一个坏主意,因为它使依赖易访问名称的人更难使用您的应用。
    【解决方案3】:

    是的,Qt Designer 中的“AccessibleName”也需要设置,而不仅仅是“ObjectName”

    【讨论】:

    • 那里有些不寻常的地方。我可以使用 Qt Designer 创建一个带有两个 QPushButtons 的 QWidget,并使用分配给 QWidget 的 css 样式表中的选择器 QPushButton#button_name 按名称选择每个按钮,从而为两个按钮提供不同的背景颜色。它可以正常工作(对我而言),无需为 AccessibleName 设置任何内容。
    • 我相信我正在使用 4.7.1。我在小部件的构造函数中应用样式表。
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 2020-04-13
    • 2018-09-26
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多