【问题标题】:It is possible to set the CSS white-space of a QtQuick Label to pre-wrap?可以将 QtQuick 标签的 CSS 空白设置为预包装吗?
【发布时间】:2019-01-28 17:09:59
【问题描述】:

我在 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,并且原始文本中的多个空格被压缩为一个空格(如果文本不包含 HTML,则呈现为普通文本和空格被保留)。

QWidget 有一个 setStyleSheet 方法,它显然支持样式“white-space: pre-wrap”,这是我需要让 HTML 呈现来保留空格,但我不确定我是否可以将此应用于 QML 文件中的标签。有什么方法可以实现吗?

编辑:此答案:https://stackoverflow.com/a/2756376/14606 显示为 QLabel 设置 styleSheet 属性。有没有办法编写一个函数,让我通过我的 QtQuick Label 并将其转换为 QLabel 并以这种方式设置样式表?

【问题讨论】:

  • A Label 不是 QWidget,也不是继承,也不能强制转换 QLabel 所以算了。

标签: qt qtquickcontrols


【解决方案1】:

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

你试过了吗?

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

edit:由于空白不是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";
}

【讨论】:

  • 不起作用,空格不是标签的属性。
  • Label 仅支持此 HTML 子集:doc.qt.io/qt-5/richtext-html-subset.html,其中不包含样式标记 - 所以“空白;预包装;”显示在显示的文本中。
  • 你 100% 确定你设置了textFormat: Text.RichText; 吗?我认为&lt;style&gt; 本身不是属性,它定义了css 属性。这只是 html afaik。
  • 它实际上设置为Text.AutoText,因此它会根据需要显示 Text.RichText (就像那里有 HTML 标签一样)。它不会渲染 标签本身,但它会忽略标签并渲染它们之间的文本(“white-space: pre-wrap;”),就好像它是任何其他普通文本一样。
【解决方案2】:

您实际上可以通过对原始字符串进行文本替换并将所有常规空格 (" ") 替换为 &amp;#8203;&amp;#32; (是一个长度为零的字符串,后跟一个常规字符串)。然后Label 将忠实地呈现连续的空格,就好像空白样式已设置为预换行一样。不幸的是,这只有一种工作方式(至少对我而言),因为Label 在这两种情况下都不能以相同的方式处理换行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2013-10-26
    相关资源
    最近更新 更多