19

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

QLabel {
background: black;
color: white;
}

在我添加带有嵌入式 URL 的文本并将其设置Qt::TextFormatQt::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

4 回答 4

9

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

于 2014-02-08T08:25:18.393 回答
7

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

QTextBrowser browser;
// IMPORTANT! - set the stylesheet before the content
browser->document()->setDefaultStyleSheet("a {color: white; }");
browser->setText(html);
于 2011-04-01T08:01:00.707 回答
2

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

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

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

{ color: inherit; } 
于 2020-06-20T15:19:28.040 回答