【问题标题】:How do I customise the appearance of links in QLabels using style sheets?如何使用样式表自定义 QLabels 中链接的外观?
【发布时间】:2011-03-31 09:33:21
【问题描述】:

我有一个QLabel,带有一个设置深色背景的 Qt 样式表:

QLabel {
background: black;
color: white;
}

在我添加带有嵌入 URL 的文本并将 Qt::TextFormat 设置为 Qt::RichText 之前,这可以正常工作。该链接显示为默认的深蓝色,在深色背景下难以阅读。

我尝试过通过样式表自定义它,例如:

a { color: white; }
QLabel!visited { color: white; }

但这没有任何作用。似乎确实有效的一件事是更改应用程序的QPalette

QPalette newPal(qApp->palette());
newPal.setColor(QPalette::Link, Qt::white);
newPal.setColor(QPalette::LinkVisited, Qt::white);
qApp->setPalette(newPal);

但是,这需要对颜色进行硬编码。有什么方法可以改为从样式表中设置颜色?

编辑:

我发现了自定义调色板的另一个问题。如果我只想修改我的小部件的调色板(在上面的示例中用widget 代替qApp),那么这不起作用。我不想影响应用程序中的所有其他QLabels,那么如何限制此小部件的调色板更改?

【问题讨论】:

    标签: qt stylesheet qlabel


    【解决方案1】:

    一种方法是将style="color: whatever" 或类添加到链接的内部<span>。我还没有弄清楚如何将它应用于整个应用程序,但这是一个好的开始。

    【讨论】:

    • 这是唯一的实际答案。请注意,Qt 设计器似乎明确地为每个链接着色,这会覆盖全局样式表中的任何默认值。
    • 这里稍微简化一下,直接给锚标签添加样式:<a href="..." style="color: whatever">...</a>。请注意,此答案与样式表无关,因此它不能回答原始问题...不过很有用。
    【解决方案2】:

    明确设置QPalette 几乎没有成功——如果您为整个应用程序设置它,它会起作用,但如果您在小部件中设置它就不行。最后,我需要做的最简单的事情是使用QTextBrowser,而不是支持 HTML 的subset。然后我可以使用常规的 CSS 样式表覆盖链接的颜色:

    QTextBrowser browser;
    // IMPORTANT! - set the stylesheet before the content
    browser->document()->setDefaultStyleSheet("a {color: white; }");
    browser->setText(html);
    

    【讨论】:

      【解决方案3】:

      简短的回答是否定的。最近我不得不这样做。

      1. QLabel!visited 不起作用,因为 Qt 不跟踪 QLabel 是否被访问过。
      2. QLabel { color: ... } 不适用于链接。找不到原因,但我发现的只是在这种情况下使用 QPallete 的建议。

      【讨论】:

      • 我想我已经得出了相同的结论 - 请参阅我的其他评论
      • QLabel().setText('某事')
      【解决方案4】:

      您可以将HTML中的颜色标签设置为

      { color: inherit; } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-20
        • 1970-01-01
        • 2016-01-02
        • 2013-09-03
        • 2017-10-03
        相关资源
        最近更新 更多