2015-09-23 2 views
0

Я создал приложение, которое использует QWebView для создания шаблона, а затем печатает его как файл PDF. В представлении я установил фоновое изображение для тела и, когда вычеркнул программу, первый раз, когда я печатаю PDF, изображение не печатается в pdf. Затем я снова печатаю тот же файл pdf и появляется изображение. Таким образом, для всех субсекументных отпечатков. Таким образом, это не работает только для первой печати.QWebView не правильно загружает изображения

Я дебютировал html-код, и обратное изображение всегда установлено.

Для печати файла в формате PDF Я использую это:

QPrinter printer; 
printer.setOrientation(QPrinter::Landscape); 

printer.setPaperSize(QSizeF(76.2,180),QPrinter::Millimeter); 
printer.setPageMargins(27,11.2,4,4.4,QPrinter::Millimeter); 

QPrintDialog *dialog = new QPrintDialog(&printer); 

if (dialog->exec() == QDialog::Accepted){ 
    QWebView *view = new QWebView(); 
    QUrl url(QApplication::applicationDirPath()); 
    view->setHtml(cheque,url); 

    view->print(&printer); 
} 

Где проверка это шаблон HTML

+0

ли вы создать новый 'QWebView' instanse (' QWebView * вид = новый QWebView(); ') для каждой последующей печати, как в коде вопроса или 'view' повторно используется (хранится в качестве члена класса) ? –

+0

Из документации 'QWebView :: setHtml':« html загружается немедленно, а внешние объекты загружаются асинхронно ». Я предполагаю, что когда вы вызываете 'view-> setHtml', изображение еще не загружено. Это может быть проблемой. – HeyYO

+0

спасибо, ребята, решили это – rocko

ответ

0

Проблема заключалась в том, что объекты загружаются асинхронно в QWebView х. Поэтому я объявил QWebView перед вызовом QPrintDialog.

QPrinter printer; 
printer.setOrientation(QPrinter::Landscape); 

printer.setPaperSize(QSizeF(76.2,180),QPrinter::Millimeter); 
printer.setPageMargins(27,11.2,4,4.4,QPrinter::Millimeter); 

QWebView *view = new QWebView(); 
QUrl url(QApplication::applicationDirPath()); 
view->setHtml(cheque,url); 

QPrintDialog *dialog = new QPrintDialog(&printer); 

if (dialog->exec() == QDialog::Accepted){ 

    view->print(&printer); 
} 
+0

Это решение небезопасно с точки зрения условий гонки времени. Конечно, диалог печати занимает довольно много времени, поэтому 'QWebView' может завершить загрузку своего контента. Однако это ошибка. Печать следует запускать только при загрузке страницы. Сигнал 'QWebView :: loadFinished (bool)' может использоваться для этого. –

Смежные вопросы