QTextDocument ест несколько пробелов - PullRequest
1 голос
/ 07 июня 2010

Существует код 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>

Но когда я устанавливаю HTML с тегом p и несколькими пробелами, он удаляет пробелы. Вопрос - почему? Другой вопрос - почему это добавляет поля к тегу p?

PS Хорошо работает, если добавить строку

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

перед выполнением setHtml - он не удаляет несколько пробелов. Но что это за стиль-тег? Разве это не таблица стилей по умолчанию? Почему Qt игнорирует это?

Спасибо за ответ.

Ответы [ 2 ]

3 голосов
/ 10 июня 2010

это поведение от html, html просто игнорирует более одного пробела внутри тегов ..

попробуйте использовать специальный код для пробела: &nbsp;

#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();
}
0 голосов
/ 17 сентября 2010

Документация говорит вам, какие теги CSS поддерживаются в объекте Rich Text - пробел: предполагается, что предварительная переноска должна поддерживаться, по крайней мере в моих документах на Qt 4.7. Возможно, вам следует поднять ошибку в баг-трекере?

...