QWebView不显示png图像

时间:2015-02-09 20:30:13

标签: qt5 qwebview

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

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的所有图片都正确列出,插件加载正常,因为我可以看到png jpeg 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。

更新

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

1 个答案:

答案 0 :(得分:0)

我没有在您的应用程序目录中看到imageformats目录。

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

相关问题