gpt4 book ai didi

c++ - QTextDocument 吃掉多个空格

转载 作者:行者123 更新时间:2023-11-30 03:10:40 29 4
gpt4 key购买 nike

有一段Qt/C++代码:

#include <QtCore/QCoreApplication>
#include <QtGui/QTextDocument>
#include <QByteArray>
#include <QDebug>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTextDocument *doc = new QTextDocument();

qDebug() << " === Document was: === ";
qDebug() << doc->toHtml(QByteArray());

doc->setHtml("<p>THIS IS SPARTA</p>");

qDebug() << " === Document now: === ";
qDebug() << doc->toHtml(QByteArray());

return a.exec();
}

输出:

 === Document was: ===  
"<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'Helvetica'; font-size:12pt; font-weight:400; font-style:normal;">
<table style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></td></tr></table></body></html>"
=== Document now: ===
"<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'Helvetica'; font-size:12pt; font-weight:400; font-style:normal;">
<table style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">THIS IS SPARTA</p></td></tr></table></body></html>"

正如我所见,QTextDocument 中有类似默认 CSS 的内容:

<style type="text/css">p, li {white-space: pre-wrap;}</style>

但是,当我使用 p 标记和多个空格设置 HTML 时,它会删除空格。问题是——为什么?另一个问题是 - 为什么要给 p 标签添加边距?

PS 如果我添加一行就可以正常工作

doc->setDefaultStyleSheet("p, li { white-space: pre-wrap; }");

在执行 setHtml 之前 - 它不会删除多个空格。但是这个样式标签是什么?它不是默认样式表吗?为什么 Qt 忽略它?

感谢您的回答。

最佳答案

这种行为来自 html,html 只是忽略标签内的多个空格..

尝试使用空格专用代码: 

#include <QtCore/QCoreApplication>
#include <QtGui/QTextDocument>
#include <QByteArray>
#include <QDebug>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTextDocument *doc = new QTextDocument();
qDebug() << " === Document was: === ";
qDebug() << doc->toHtml(QByteArray());

QByteArray myhtml ="<p>THIS IS SPARTA</p>";

doc->setHtml(myhtml.replace(" ","&nbsp;"));

qDebug() << " === Document now: === ";
qDebug() << doc->toHtml(QByteArray());

return a.exec();
}

关于c++ - QTextDocument 吃掉多个空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2991973/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com