Qt库中控件的默认HTML样式

时间:2009-05-31 14:05:48

标签: c++ qt

这是关于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的计算机,所以我无法检查它。

4 个答案:

答案 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.

see here for more info

编辑:

要获取默认样式表,可以调用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);
 }

link