我如何使用样式表自定义QLabel中链接的外观?

24

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

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,那么如何将调色板更改限制为此小部件?

4个回答

13

一种方法是在链接的内部 <span> 标签上添加 style="color: whatever" 或类。我还没有想到如何将其应用于整个应用程序,但这是一个很好的起点。


1
这是唯一的实际答案。请注意,Qt设计师似乎明确地为每个链接着色,这会覆盖全局样式表中的任何默认设置。 - c z
5
这里稍作简化,直接将样式添加到锚点标签中:<a href="..." style="color: 颜色">...</a>。请注意,这个答案不涉及样式表,因此并没有回答原始问题...但仍然有用。 - darrenp

7

我尝试过显式设置 QPalette,但是只有在整个应用程序中设置才有效,而在窗口小部件中设置无效。最终,根据我的需求,最简单的方法是使用 QTextBrowser,它支持 HTML 的子集。然后,我可以使用常规 CSS 样式表覆盖链接的颜色:

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

5

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

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

我认为我得出了相同的结论 - 请参见我的其他评论。 - the_mandrill
10
QLabel().setText('<a href="..link"><span style="color:white;">something</span>') - Asi

0

你可以在 HTML 中设置颜色标签为

{ color: inherit; } 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接