Russian Qt Forum

Qt => Печать => Тема начата: Blayder от Июль 22, 2009, 21:42



Название: QTextEdit, HTML и таблица
Отправлено: Blayder от Июль 22, 2009, 21:42
Сделал вроде простенький html для распечатки без каких-либо наворотов и получается фигня при вставке в QTextedit.
излазил документацию:
 - вроде все должно быть окей;
 - http://doc.trolltech.com/4.5/richtext-html-subset.html ;
 - Table supports the following attributes: border, bgcolor (Qt color names or #RRGGBB), cellspacing, cellpadding, width (absolute or relative), and height. ;

В общем я в недоумении...

код:
Код
C++ (Qt)
bool frmConfig::remPrint()
{
   CQTextEdit *text = new CQTextEdit(this);
   QFile *remHtml = new QFile("rem_tal.html");
   if (remHtml->open(QIODevice::ReadOnly))
   {
QTextStream inH(remHtml);
text->setText(inH.readAll());
QPrinter printer;
printer.setPaperSize(QPrinter::A4);
printer.setOrientation(QPrinter::Landscape);
qDebug() << text->document()->toHtml()
QPrintPreviewDialog pvDialog(&printer);
connect(&pvDialog, SIGNAL(paintRequested(QPrinter *)), text, SLOT(print(QPrinter *)));
pvDialog.exec();
return true;
   } else
   {
return false;
   }
}

Изначально пробовал и через setHtml, но ничего абсолютно не изменилось...
еще что заметил, проследив через дэбаг - там почему-то во всех тэгах дропается параметр высоты и напихивается все стилем.

В аттачах:
 - оригинальный хтмл, как он должен быть;
 - пдф того, что выходит на печать из QTextEdit;
 - код того, что выводится в дэбаг;

Помогите разобраться, как получить на выходе оригинальный хтмл...
П.С. я так понял "&nbsp" кутя не берет?


Название: Re: QTextEdit, HTML и таблица
Отправлено: Blayder от Июль 23, 2009, 13:56
опробовал на элементарном примере с высотой и использованием css:
Код
<html>
<body>
<table style="height:300px" border="2" >
<tr>
<td>
DDDDDDDDDDDDDDDDDDDDddd
</td>
</tr>
</table>
</body>
</html>
вывод из документа:
Код
<!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:'Serif'; font-size:8pt; font-weight:400; font-style:normal;">
<table border="2" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">DDDDDDDDDDDDDDDDDDDDddd </p></td></tr></table></body></html>
Ну хоть у кого-нить есть варианты, как побороть высоту строк?


Название: Re: QTextEdit, HTML и таблица
Отправлено: Blayder от Июль 24, 2009, 00:12
*разговор с самим собой*
Частично преодолел загвоздку заменив QTextEdit на QWebView.
Терь чет картинка верхушки не грузится в нем...
*Взял бубен в руки и пошел дальше общаться с дУхами... *
(http://nauka.bible.com.ua/religion/sham4.jpg)




Название: Re: QTextEdit, HTML и таблица
Отправлено: Blayder от Июль 24, 2009, 17:00
За видом отсутствия интереса у других подсобить, методом тыка и с помощью единственно доброго создания его величества google.com - пришел к просто, имхо, варианту:
 - используем QWebView;
 -  в него помещаем наш требуемый html для распечатки;
 - для использования QPrintDialog необходимо унаследоваться от QWebView и переопределить метод принт в качестве слота;
 - небольшим трюком убрать серый фон QWebView;

 - нерешеным остается тока отсутствие картинки в документе  ???
И так - коды:

Наследуемся от QWebView и создаем слот для печати:
Код
C++ (Qt)
class CQWebView : public QWebView
{
   Q_OBJECT
 
public:
   CQWebView(QWidget* parent): QWebView(parent) {}
 
private slots:
   void print(QPrinter *);
};

Определние слота делаем таким образом:

Код
C++ (Qt)
void CQWebView::print(QPrinter* p)
{
   QWebView::print(p);
}
 

ну и собственно сама функция печати:
Код
C++ (Qt)
bool frmConfig::remPrint()
{
   CQWebView *htmlView = new CQWebView(this);
   QFile *remHtml = new QFile("rem_tal.html");
   if (remHtml->open(QIODevice::ReadOnly))
   {
QTextStream inH(remHtml);
QPalette palette = htmlView->palette();
palette.setBrush(QPalette::Base, Qt::transparent);
htmlView->page()->setPalette(palette);
htmlView->setAttribute(Qt::WA_OpaquePaintEvent, false);
htmlView->setHtml(inH.readAll());
QPrinter printer;
QPrintPreviewDialog pvDialog(&printer);
pvDialog.printer()->setPaperSize(QPrinter::A4);
pvDialog.printer()->setOrientation(QPrinter::Landscape);
pvDialog.printer()->setPageMargins(10.0,10.0,10.0,10.0,QPrinter::Millimeter);
connect(&pvDialog, SIGNAL(paintRequested(QPrinter *)), htmlView, SLOT(print(QPrinter *)));
pvDialog.exec();
return true;
   } else
   {
return false;
   }
}

часть кода, помогающая справиться с фоном QWebView:
Код
C++ (Qt)
QPalette palette = htmlView->palette();
palette.setBrush(QPalette::Base, Qt::transparent);
htmlView->page()->setPalette(palette);
htmlView->setAttribute(Qt::WA_OpaquePaintEvent, false);

Возможно кому-то поможет, а может и нет. На этом заканчиваем данный топик монолога... Пойду шаманить дальше...


Название: Re: QTextEdit, HTML и таблица
Отправлено: andrew.k от Сентябрь 23, 2010, 11:20
Поржал над твоим монологом, потому что у меня параллельно идет такой же монолог, на ту же самую тему.
Если ты еще на форуме, скинь мне свои достижения. плиз. интересно посмотреть на твой результат.
актуально 1-2 месяца со дня этого сообщения :)