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

时间:2011-03-31 09:33:22

标签: qt stylesheet qlabel

我有QLabel的Qt样式表设置了深色背景:

QLabel {
background: black;
color: white;
}

在我使用嵌入式网址添加文字并将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 个答案:

答案 0 :(得分:5)

我在显式设置QPalette方面没什么成功 - 如果你为整个应用程序设置它,它就有效,但如果你在小部件中设置它,则不行。最后,对于我需要做的最简单的事情是使用QTextBrowser而不是支持subset HTML。然后我可以使用常规的CSS样式表覆盖链接的颜色:

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

答案 1 :(得分:5)

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

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

{ color: inherit; }