QWebView не отображает изображения png

У меня проблема с 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-открытый исходный код windows-x86-msvc2013-5.4.0.

ОБНОВЛЕНИЕ:

Я попытался скомпилировать свой проект с версией qt-opensource-windows-x86-mingw491_opengl-5.4.0.exe, и это та же проблема, изображения не отображаются с QWebView. Протестировано на 32-разрядной версии Windows XP и 32-разрядной версии Windows 7.


person H Aßdøµ    schedule 09.02.2015    source источник


Ответы (1)


Я не вижу каталог imageformats в каталоге вашего приложения.

Скопируйте каталог path/to/Qt/plugins/imageformats в каталог вашего приложения. Вы можете удалить некоторые плагины, если не хотите использовать их все.

person Community    schedule 09.02.2015
comment
Хорошо добавьте его как imageformats, а как plugins/imageformats оба не показывали изображения. Я полагаю, что png имеет встроенную поддержку Qt, если я не ошибаюсь. - person H Aßdøµ; 10.02.2015