可以将 QtQuick 标签的 CSS white-space 设置为预包装吗?

It is possible to set the CSS white-space of a QtQuick Label to pre-wrap?

我在 QML 文件中有一个 QtQuick Label,如下所示:

import QtQuick.Controls 1.3 as Controls
Controls.Label {
    id: lbl
    text: "This is        some <b>bold text</b> with extra      white space"
}

如果我的标签的 text 属性 包含任何 HTML,则标签将其呈现为 HTML 和多个 space原始文本被压缩为单个 space(如果文本不包含 HTML,则将其呈现为普通文本并保留 space)。

QWidget 有一个 setStyleSheet 方法,显然支持 "white-space: pre-wrap" 风格,这是我需要得到 HTML 渲染以保留白色 space,但我不确定我是否可以将其应用于 QML 文件中的标签。有什么办法可以实现吗?

编辑: 这个答案: 显示为 QLabel 设置样式表 属性。有什么方法可以编写一个函数,让我传递我的 QtQuick Label 并将其转换为 QLabel 并以这种方式设置样式表?

你只需要知道如何在 qml 中应用 css,而不是代码 (widget.setStyleSheet("...")) ?

你试过吗?

Controls.Label {
    id: lbl;
    white-space: pre-wrap;
    text: "This is        some <b>bold text</b> with extra      white space";
}

编辑:由于white-space不是Label的属性,所以需要为label的文字设置这个属性。

如果可能(只是猜测)使用:

Controls.Label.Text {
    white-space: pre-wrap;

但如果没有,请使用此解决方法:

Controls.Label {
    id: lbl;
    textFormat: Text.RichText;
    text: "<style>white-space: pre-wrap;</style>This is        some <b>bold text</b> with extra      white space";
}

您实际上可以通过对原始字符串进行文本替换并替换所有内容来实现我正在寻找的内容(可以显示 HTML 同时保留白色 space 的 Label)常规 spaces (" ") 和 &#8203;&#32;(这是一个零长度字符串,后跟一个常规字符串)。然后 Label 将忠实地呈现连续的 spaces,就好像 white-space 样式已设置为预换行一样。不幸的是,由于 Label 在这两种情况下处理换行的方式不同。

只有这种方法(至少对我来说是这样)有效。