2015-02-09 105 views
0

我在使用QWebView时遇到了显示图像(png格式)的问题,我的主要目的是将它用作报告生成器。我已阅读其他建议,如在应用程序文件夹下放置imageformats,为图像设置完整路径,从资源加载图像,验证我的html符合W3C标准,并最终将我的应用程序测试到另一台清洁机器,以查看问题是否仅出自我的机器。QWebView不显示png图像

void SemesterResultsReport::printerSetup() { 
    QPrinter *printer = new QPrinter(QPrinter::ScreenResolution); 
    printer->setFullPage(true); 
    printer->setResolution(90); 
    printer->setPaperSize(QPrinter::A4); 
    printer->setOrientation(QPrinter::Landscape); 
    printer->setPageMargins(5, 5, 5, 5, QPrinter::Millimeter); 

    QPrintPreviewDialog *dlg = new QPrintPreviewDialog(printer, this); 
    connect(dlg, SIGNAL(paintRequested(QPrinter *)), this, SLOT(semesterResultsReportPrint(QPrinter *))); 
    dlg->exec(); 
} 

void SemesterResultsReport::semesterResultsReportPrint(QPrinter *printer) { 
    QString strStream; 
    QTextStream out(&strStream); 
    qDebug() << QCoreApplication::applicationDirPath(); 
    QList<QByteArray> list = QImageReader::supportedImageFormats(); 
    for (int i = 0; i < list.size(); ++i) { 
     qDebug() << list.at(i); 
    } 
    qDebug() << QDir(":/imgs/").entryList(); 

    out << "<!DOCTYPE html>" 
     << "<html>\n" 
     << "<head>" 
     << "<title>ff</title>" 
     << "<meta http-equiv=\"Content-Type\" content =\"text/html;charset=utf-8\" >" 
     << "<style type=\"text/css\"> " 
     << " html, body { margin: 5px; direction: rtl; }" 
     << " table { border: 1; border-collapse: collapse; float:right; page-break-after:auto !important; width: 100%; }" 
     << " th, td { border: 1px solid #000; padding: 0; align: center; text-align: center; font-family: \"Times New Roman\"; font-size: 16px; page-break-inside:avoid; page-break-after:auto; }" 
     << " tr { page-break-inside:avoid; page-break-after:auto !important; }" 

     << " thead { display:table-header-group; }" 
     << " tfoot { display:table-footer-group; } " 
     << "</style>" 
     << "</head>\n" 
     << "<body>\n" 
     << "<table>" 
     << " <tr>" 
     << "  <td rowspan=\"2\">" + QString("الشعب") + "</td>" 
     << "  <td rowspan=\"2\"><img class=\"vertical-center\" src=\"imgs/registered-students2.png\" alt=\"\"></td>" 
     << "  <td rowspan=\"2\"><img class=\"vertical-center\" src=\"imgs/registered-students2.png\" alt=\"\"></td>" 
     << "  <td rowspan=\"2\"><img class=\"vertical-center\" src=\"imgs/num-students-above-avg2.png\" alt=\"\"></td>" 
     << "  <td colspan=\"2\">" + QString("الجنس") + "</td>" 
     << "  <td colspan=\"18\">" + QString("نسب النجاح") + "</td>" 
     << " </tr>" 
     << " <tr>" 
     << "  <td><img class=\"vertical-center\" src=\"qrc:imgs/sex-male.jpg\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\"imgs/sex-male.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/math.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/physic.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/science.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/arab.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/frensh.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/english.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/3rd-language.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/physolophie.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/geographie.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/islamic.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/managment.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/contable.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/low.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/mechanic.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/electricity.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/civil.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/route.png\" alt=\"\"></td>" 
     << "  <td><img class=\"vertical-center\" src=\":imgs/sport.png\" alt=\"\"></td>" 
     << " </tr>" 
     << "</table>" 
     << "</body>" 
     << "</html>"; 

    // Just for debugging purposes 
    QFile file("QWebViewReport.html"); 
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { 
     //MSG(QString("Can`t create file %1").arg(htmlFileName)); 
    } 

    file.write(strStream.toUtf8()); 
    file.close();/**/ 

    /* 
    * Prepare QTextDocument 
    */ 
    /**/QSizeF paperSize; 
    paperSize.setWidth(printer->width()); 
    paperSize.setHeight(printer->height()); 
    QTextDocument *document = new QTextDocument(); 
    QTextOption options; 
    options.setTextDirection(Qt::RightToLeft); 
    document->setDefaultTextOption(options); 
    document->setHtml(strStream); 
    document->setPageSize(paperSize); 
    //document->print(printer); 
    /**/QWebView *view = new QWebView; 
    view->settings()->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, true); 
    view->settings()->setAttribute(QWebSettings::LocalContentCanAccessFileUrls, true); 
    view->settings()->setAttribute(QWebSettings::LocalStorageEnabled, true); 
    view->settings()->setAttribute(QWebSettings::AutoLoadImages, true); 
    view->settings()->setAttribute(QWebSettings::PluginsEnabled, true); 
    view->setHtml(strStream); 
    view->print(printer); 
} 

正确列出所有的qrc图像,插件加载罚款,我可以看到JPEG,PNG和GIF等格式。 我的应用程序文件夹:

│ arcicalc.edb 
│ icudt53.dll 
│ icuin53.dll 
│ icuuc53.dll 
│ Qt5Core.dll 
│ Qt5Gui.dll 
│ Qt5Network.dll 
│ Qt5OpenGL.dll 
│ Qt5PrintSupport.dll 
│ Qt5QuickWidgets.dll 
│ Qt5Sql.dll 
│ Qt5WebChannel.dll 
│ Qt5WebEngine.dll 
│ Qt5WebKit.dll 
│ Qt5WebKitWidgets.dll 
│ Qt5WebView.dll 
│ Qt5Widgets.dll 
│ QWebViewReport.html 
│ StudentsNotesReporter.exe 
│ 
├───imgs 
│ 
├───platforms 
│  qminimal.dll 
│  qoffscreen.dll 
│  qwindows.dll 
│ 
├───printsupport 
│  windowsprintersupport.dll 
│ 
└───sqldrivers 
     qsqlite.dll 

注: 如果我使用QTextDocument,图像正常加载。

我的编程环境:

Visual Studio 2013社区版。

Qt-opensource windows-x86-msvc2013-5.4.0。

UPDATE:

我试图编译我的项目,qt-opensource-windows-x86-mingw491_opengl-5.4.0.exe版本,它是同一个问题,没有与QWebView显示的图像。 在Windows XP 32位和Windows 7 32位上进行测试。

回答

0

我在应用程序目录中看不到imageformats目录。

path/to/Qt/plugins/imageformats目录复制到您的应用程序目录中。如果你不想使用所有的插件,你可以删除一些插件。

+0

把它添加为'imageformats',和'plugins/imageformats'都没有显示图像。如果我没有错,我想png与Qt本地支持。 – 2015-02-09 23:46:50