Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QWebView未正确加载图像_Qt_Qwebview_Qprinter - Fatal编程技术网

Qt QWebView未正确加载图像

Qt QWebView未正确加载图像,qt,qwebview,qprinter,Qt,Qwebview,Qprinter,我创建了一个应用程序,它使用QWebView创建模板,然后将其打印为pdf文件。 在视图中,我为主体设置了一个背景图像,在执行程序时,第一次打印pdf时,图像没有打印在pdf中。然后,我再次打印相同的pdf文件,图像就会出现。因此,对于所有的子线索打印。 所以,它不仅仅适用于第一次打印 我删除了html代码的bug,并且一直在设置backgrund图像 为了打印pdf文件,我使用以下方法: QPrinter printer; printer.setOrientation(QPrinter::La

我创建了一个应用程序,它使用QWebView创建模板,然后将其打印为pdf文件。 在视图中,我为主体设置了一个背景图像,在执行程序时,第一次打印pdf时,图像没有打印在pdf中。然后,我再次打印相同的pdf文件,图像就会出现。因此,对于所有的子线索打印。 所以,它不仅仅适用于第一次打印

我删除了html代码的bug,并且一直在设置backgrund图像

为了打印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);
}

其中check是html模板

问题在于对象在QWebView中异步加载。因此,我在调用QPrintDialog之前声明了QWebView

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);
}

是否创建新的QWebView实例QWebView*视图=新的QWebView;对于问题中的每个后续打印,代码或视图被重用并存储为类成员?来自QWebView::setHtml文档:html立即加载;外部对象是异步加载的。我猜当你调用view->setHtml时,图像还没有加载。这可能就是问题所在。谢谢,伙计们,解决了它。从时间竞赛的角度来看,这个解决方案是不安全的。当然,打印对话框通常需要相当长的时间,因此QWebView可以完成其内容的加载。然而,这是一个错误。只有在加载页面时才应开始打印。可以使用信号QWebView::loadFinishedbool来正确执行此操作。