Qt 库中控件的默认 HTML 样式

Posted

技术标签:

【中文标题】Qt 库中控件的默认 HTML 样式【英文标题】:Default HTML style for controls in the Qt library 【发布时间】:2009-05-31 14:05:47 【问题描述】:

这是一个关于 Qt 库的问题,而不是关于网页设计的问题。

对于 QLabel 和其他控件,我可以设置 html 文本,例如“

Some Text

”。问题是:默认的 HTML 样式在哪里定义?如何找出

标签使用的字体?

下一个问题:我可以更改默认的 HTML 样式吗?

编辑:我想在我的代码中的一处指定我的控件将如何显示。在所有标签中指定 css 样式对我来说似乎不是一个优雅的解决方案。

Edit2:似乎人们不明白这个问题。我会再尝试。假设我执行以下操作:

QLabel* label = ... label->setText("This <b>is</b> a <h3>Header</h3>");

问题:标签文本渲染将使用哪些字体?我该如何控制它们?有没有办法指定

标题的默认字体大小?

Edit3:Thomi 建议使用 QTextDocument::setDefaultStyleSheet。但这只是一种解决方法。我必须手动将 css 样式应用于界面中的所有 QTextEdits(而不是 QLabels)。问题是:如何找出默认样式表? QTextDocument::setDefaultStyleSheet 只是为单个 QTextDocument 对象覆盖它。也许 QTextDocument::defaultStyleSheet 返回它?我现在没有安装 Qt 的计算机,所以无法检查。

【问题讨论】:

Sergy - 我没有发现区别,因为我已经很长时间没有阅读有关 Qt 的任何内容了。因此,我删除了我的答案。感谢您的澄清。 Sergey - 我认为您的问题标题可能需要修改以提及 Qt / C++ 【参考方案1】:

你想要的不能用 QLabel 完成。 QLabel 设计用于保存原始文本标签 - 它的 HTML 支持相当...绳索。

但是,您可以使用 QTextEdit 和 QTextDocument 来实现。

尝试这样的事情(我是凭记忆写的,所以它可能无法编译或 100% 正确):

QTextDocument *doc = new QTextDocument(this);
doc->setDefaultStyleSheet("h3  font-color: red; ");
QTextEdit *edit = new QTextEdit(this);
edit->setDocument(doc);
edit->setHTML("this is a red <h3>heading</h3>");

重要的是使用 QTextDocument,它允许您更改 HTML 样式表。来自 QT 文档:

默认样式表应用于插入到文档中的所有新的 HTML 格式文本,例如使用 setHtml() 或 QTextCursor::insertHtml()。 样式表需要符合 CSS 2.1 语法。 注意:更改默认样式表对文档的现有内容没有任何影响。

see here for more info

编辑:

要获取默认样式表,您可以调用QTextDocument::DefaultStyleSheet() - 但是,这仅适用于 QTextDocuments,可能适用于也可能不适用于所有 Qt 控件(包括 QLabel)。

【讨论】:

我已经在问题中反映了您的答案。 看来没有其他办法可以解决这个问题。我接受了你的问题。【参考方案2】:

正如其他答案中提到的,您可以对小部件样式执行此操作,但不能对 HTML 标记执行此操作。唯一的方法是在你的小部件 text 属性中单独设置 CSS 样式。

Qt 使用其富文本引擎来呈现根据 HTML 4 规范中的规则定义的 HTML 标签。见Supported HTML Subset

如果您的所有标签只需要一种样式,为什么不使用setStyleSheet() 设置它,如下所示:

MainWindow w;    
w.setStyleSheet("QLabelfont-size:20px; color:purple;;");

除非您想在标签中使用一种以上的样式(例如:“More than one style”)这是正确的方法。

【讨论】:

我需要使用不止一种风格。我想我会创建一些丑陋的包装器,为 html 标签添加样式。【参考方案3】:

看看Qt Documentation about Style Sheets

您或许可以使用QApplication::setStyleSheet()QWidget::setStyleSheet() 来完成它。

【讨论】:

我在创建问题之前已经阅读过它。没有一个关于 HTML 的词。 没有。他在询问 HTML 样式表,这与小部件样式表不同。如果我理解正确,他希望更改 QLabel 用于呈现简单 HTML 文本的 HTML 样式,而不是更改标签小部件在屏幕上的显示方式。【参考方案4】:

在最新的 QT 中,即在 QT4 上。以上答案有效。 告诉你正在使用哪个 QT 版本... 试试下面...

 QLabel
     border: 2px solid green;
     border-radius: 4px;
     padding: 2px;
     background-image: url(images/welcome.png);
 

link

【讨论】:

以上答案是有效的,但我想对于不同的问题。我编辑了这个问题,试图澄清它。

以上是关于Qt 库中控件的默认 HTML 样式的主要内容,如果未能解决你的问题,请参考以下文章

伪元素表单控件默认样式重置与自定义大全

PHP Wordpress - 从默认库中删除内联样式

Wordpress-从默认库中删除内联样式

设置TextBlock默认样式后,其他控件的Text相关属性设置失效问题

QT样式自定义 001 :SliderLineEdit 滑动输入框

Qt for Python控件显示(默认不显示没有父控件的控件)