【问题标题】:QTextBrowser doesn't properly show backslashed charactersQTextBrowser 不能正确显示反斜杠字符
【发布时间】:2018-04-12 23:09:49
【问题描述】:

我正在创建一个小部件,它将以非常格式化的方式显示 XML 字符串。为此,我使用QXmlStreamReaderQXmlStreamWriter(基于Format XML file in c++ or Qt 的回答)并将文本提供给QTextBrowser

message = "<person><name>John</name><surname>Smith</surname><hobbies><sport>football</sport><sport>tenis</sport><activity>dancing</activity></hobbies></person>"
byteArray = QByteArray()
xmlReader = QXmlStreamReader(message)
xmlWriter = QXmlStreamWriter(byteArray)
xmlWriter.setAutoFormatting(True)
while (not xmlReader.atEnd()):
    xmlReader.readNext();
    if (not xmlReader.isWhitespace()):
        xmlWriter.writeCurrentToken(xmlReader)
prettyMessage = str(byteArray.data())
textBrowser.setText(prettyMessage)

但生成的文本不会将 \n 转换为新行:

如果我手动输入带有\n 的字符串,它们将被转换为新行:

textBrowser.setText("1\n2\n3\n4")

我检查了byteArray 的确切内容,以确保\n 作为一个字符而不是作为两个单独的“\”和“n”字符传递:

for i in range(0, byteArray.size()):
    sys.stdout.write(byteArray.at(i))

按预期打印出 XML 字符串:

<?xml version="1.0" encoding="UTF-8"?>
<person>
    <name>John</name>
    <surname>Smith</surname>
    <hobbies>
        <sport>football</sport>
        <sport>tenis</sport>
        <activity>dancing</activity>
    </hobbies>
</person>

我正在使用 python 3.6 和 PyQt5

【问题讨论】:

    标签: python xml pyqt pyqt5 qbytearray


    【解决方案1】:

    您需要解码QByteArray 中的数据。这可以使用QTextStream 来完成,然后您可以轻松设置正确的编解码器:

        byteArray = QByteArray()
        xmlReader = QXmlStreamReader(message)
        xmlWriter = QXmlStreamWriter(byteArray)
        xmlWriter.setAutoFormatting(True)
        while (not xmlReader.atEnd()):
            xmlReader.readNext();
            if (not xmlReader.isWhitespace()):
                xmlWriter.writeCurrentToken(xmlReader)
    
        stream = QTextStream(byteArray)
        stream.setCodec(xmlWriter.codec())
        textBrowser.setText(stream.readAll())
    

    【讨论】:

    • 不需要stream.setCodec(xmlWriter.codec())这一行。
    • @SIMEL。如果 xml 编写器使用的编解码器与 QTextStream 使用的默认编解码器不同,则它是必要的。因此,通常最好始终包含该行。
    猜你喜欢
    • 2018-02-27
    • 1970-01-01
    • 2020-05-23
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2013-11-14
    相关资源
    最近更新 更多