这是关于Qt库的问题,而不是关于Web设计的问题。
对于QLabel和其他控件,我可以设置HTML文本,例如“< h3> Some Text< / h3>”。问题是:默认HTML样式在哪里定义?如何找出字体用于< h3>的字体?标记
下一个问题:我可以更改默认的HTML样式吗?
编辑:我想在我的代码中的一个位置指定我的控件将如何显示。在所有标签中指定css样式对我来说似乎不是一个优雅的解决方案。
Edit2:似乎人们没有得到这个问题。我会再尝试。假设我执行以下操作:
QLabel* label = ...
label->setText("This <b>is</b> a <h3>Header</h3>");
问题:什么字体将用于标签文字渲染?我该如何控制它们?有没有办法为&lt; h3&gt;指定默认字体大小?标题?
Edit3:Thomi建议使用QTextDocument :: setDefaultStyleSheet。但这只是一种解决方法。我必须手动将css样式应用于界面中的所有QTextEdits(而不是QLabel)。问题是:如何找出默认样式表? QTextDocument :: setDefaultStyleSheet只是覆盖单个QTextDocument对象。也许QTextDocument :: defaultStyleSheet返回它?我现在没有Qt的计算机,所以我无法检查它。
答案 0 :(得分:3)
使用QLabel无法实现您的目标。 QLabel旨在保存主要文本标签 - 它的HTML支持相当......很麻烦。
然而,你可以使用QTextEdit&amp;另外,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文档:
The default style sheet is applied to all newly HTML formatted text that is inserted into the document, for example using setHtml() or QTextCursor::insertHtml(). The style sheet needs to be compliant to CSS 2.1 syntax. Note: Changing the default style sheet does not have any effect to the existing content of the document.
要获取默认样式表,可以调用QTextDocument::DefaultStyleSheet()
- 但是,这仅适用于QTextDocuments,可能适用于所有Qt控件(包括QLabel),也可能不适用。
答案 1 :(得分:2)
正如其他答案中所提到的,您可以针对窗口小部件样式执行此操作,但不能针对HTML标记执唯一的方法是单独在小部件text
属性中设置CSS样式。
Qt使用其富文本引擎呈现HTML标记,这些标记是根据HTML 4规范中的规则定义的。见Supported HTML Subset
如果您的所有标签只需要一种样式,为什么不使用setStyleSheet()
这样设置:
MainWindow w;
w.setStyleSheet("QLabel{font-size:20px; color:purple;};");
除非你想在你的标签中使用多种风格(例如:“更多> 一种 风格”),这是正确的这样做的方法。
答案 2 :(得分:1)
查看Qt Documentation about Style Sheets
您可以使用QApplication::setStyleSheet()
或QWidget::setStyleSheet()
来完成任务。
答案 3 :(得分:0)
在最新的QT中,即在QT4上......以上答案正在起作用。 告诉你哪个QT版本工作... 请尝试以下方法......
QLabel{
border: 2px solid green;
border-radius: 4px;
padding: 2px;
background-image: url(images/welcome.png);
}