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 样式的主要内容,如果未能解决你的问题,请参考以下文章
设置TextBlock默认样式后,其他控件的Text相关属性设置失效问题