У меня проблема с 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.