使用Qt的QLabel类在呈现的HTML中更改制表位大小

Tho*_*omi 1 html c++ qt rendering

我在QT QLabel中渲染了一些HTML.HTML看起来像这样:

<pre>foo\tbar</pre>
Run Code Online (Sandbox Code Playgroud)

(请注意,我已将"\ t"放在代码中有标签字符的位置).

这渲染很好,但制表符似乎呈现为八个空格,而我希望它被渲染为4.如何在不更改源HTML的情况下更改它

str*_*ger 6

根据W3(HTML4):

水平制表符(十进制9 [ISO10646]和[ISO88591])通常是通过可视用户代理解释为最小非零数的必要向上沿着每8个字符是制表位行字符的空格.我们强烈建议使用水平选项卡中预先格式化文本,因为它是常见的做法,在编辑时,要设置制表间距为其他值,导致失调文件.

它是实现定义的,基本上是.大多数(如果不是全部)浏览器/渲染器使用八个空格作为选项卡.这不能在Qt中配置.

然而,通过HTML并使用您希望的多个空格替换选项卡是有点微不足道的.为此编写一个简单的解析器.伪代码:

for each <pre> block {
    for each line in block {
        position_in_line = 0

        for each character in line {
            if character is a tab {
                remove tab character

                do {
                    add a space character

                    ++position_in_line
                } while position_in_line % 8 != 0
            } else {
                ++position_in_line
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你很好奇,HTML3指定使用八个字符的标签:

内<PRE>,的标签应被解释为转移水平列位置到下一个位置,该位置的8在同一行上的倍数; 也就是说,col:=(col + 8)mod 8.