From 1acd9ad2bfa1c54f19fa8a71fb41e8a90233f76b Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Wed, 19 Feb 2020 17:47:01 +0100 Subject: QtPdf examples: use test.pdf from resources if no file given On iOS, the native FileDialog doesn't work, sharing doesn't work, and packaging files along with the application requires manual effort; so a PDF file in resources seems to be the easiest alternative to make the examples demo-able. QPdfDocument wants a file path, because it uses QFile; but we like to use URLs in Qt Quick. So it's a bit of an impedance mismatch, there are several choices about when and where to do the conversion, and it's hard to say which way is more correct. This way happens to work for now. Also do the rest of the things necessary to get this working on iOS. Change-Id: Icb8614d5eed2510f101aefba534ef80cf890518f Reviewed-by: Shawn Rutledge --- examples/pdf/multipage/main.cpp | 3 +++ examples/pdf/multipage/multipage.pro | 2 +- examples/pdf/multipage/resources/test.pdf | Bin 0 -> 80045 bytes examples/pdf/multipage/viewer.qml | 3 ++- examples/pdf/multipage/viewer.qrc | 3 ++- examples/pdf/pdfviewer/main.cpp | 2 ++ examples/pdf/pdfviewer/pdfviewer.pro | 2 +- examples/pdf/pdfviewer/resources/test.pdf | Bin 0 -> 80045 bytes examples/pdf/pdfviewer/viewer.qml | 3 ++- examples/pdf/pdfviewer/viewer.qrc | 3 ++- src/pdf/qpdfdocument.cpp | 4 +++- src/pdf/quick/qquickpdfdocument.cpp | 5 ++++- 12 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 examples/pdf/multipage/resources/test.pdf create mode 100644 examples/pdf/pdfviewer/resources/test.pdf diff --git a/examples/pdf/multipage/main.cpp b/examples/pdf/multipage/main.cpp index 7b766d77e..35aaa8c64 100644 --- a/examples/pdf/multipage/main.cpp +++ b/examples/pdf/multipage/main.cpp @@ -64,7 +64,10 @@ int main(int argc, char* argv[]) if (app.arguments().count() > 1) { QUrl toLoad = QUrl::fromUserInput(app.arguments().at(1)); engine.rootObjects().first()->setProperty("source", toLoad); + } else { + engine.rootObjects().first()->setProperty("source", QStringLiteral("resources/test.pdf")); } + return app.exec(); } diff --git a/examples/pdf/multipage/multipage.pro b/examples/pdf/multipage/multipage.pro index 5fff58fe1..5df9e653d 100644 --- a/examples/pdf/multipage/multipage.pro +++ b/examples/pdf/multipage/multipage.pro @@ -1,6 +1,6 @@ TEMPLATE = app -QT += qml quick pdf widgets +QT += qml quick pdf widgets svg SOURCES += main.cpp diff --git a/examples/pdf/multipage/resources/test.pdf b/examples/pdf/multipage/resources/test.pdf new file mode 100644 index 000000000..a9dc1bc29 Binary files /dev/null and b/examples/pdf/multipage/resources/test.pdf differ diff --git a/examples/pdf/multipage/viewer.qml b/examples/pdf/multipage/viewer.qml index ba54065b7..ac6d2cd9a 100644 --- a/examples/pdf/multipage/viewer.qml +++ b/examples/pdf/multipage/viewer.qml @@ -62,7 +62,7 @@ ApplicationWindow { color: "lightgrey" title: document.title visible: true - property alias source: document.source // for main.cpp + property string source // for main.cpp header: ToolBar { RowLayout { @@ -221,6 +221,7 @@ ApplicationWindow { PdfDocument { id: document + source: Qt.resolvedUrl(root.source) onStatusChanged: { if (status === PdfDocument.Error) errorDialog.open() view.document = (status === PdfDocument.Ready ? document : undefined) diff --git a/examples/pdf/multipage/viewer.qrc b/examples/pdf/multipage/viewer.qrc index 9698a2689..1b6fa52f7 100644 --- a/examples/pdf/multipage/viewer.qrc +++ b/examples/pdf/multipage/viewer.qrc @@ -1,6 +1,7 @@ viewer.qml + resources/document-open.svg resources/edit-clear.svg resources/edit-copy.svg resources/go-down-search.svg @@ -9,11 +10,11 @@ resources/go-up-search.svg resources/rotate-left.svg resources/rotate-right.svg + resources/test.pdf resources/zoom-in.svg resources/zoom-fit-best.svg resources/zoom-fit-width.svg resources/zoom-original.svg resources/zoom-out.svg - resources/document-open.svg diff --git a/examples/pdf/pdfviewer/main.cpp b/examples/pdf/pdfviewer/main.cpp index 639b11825..5f65e3061 100644 --- a/examples/pdf/pdfviewer/main.cpp +++ b/examples/pdf/pdfviewer/main.cpp @@ -64,6 +64,8 @@ int main(int argc, char* argv[]) if (app.arguments().count() > 1) { QUrl toLoad = QUrl::fromUserInput(app.arguments().at(1)); engine.rootObjects().first()->setProperty("source", toLoad); + } else { + engine.rootObjects().first()->setProperty("source", QStringLiteral("resources/test.pdf")); } return app.exec(); diff --git a/examples/pdf/pdfviewer/pdfviewer.pro b/examples/pdf/pdfviewer/pdfviewer.pro index 697349cee..b8817c9be 100644 --- a/examples/pdf/pdfviewer/pdfviewer.pro +++ b/examples/pdf/pdfviewer/pdfviewer.pro @@ -1,6 +1,6 @@ TEMPLATE = app -QT += qml quick pdf widgets +QT += qml quick pdf widgets svg SOURCES += main.cpp diff --git a/examples/pdf/pdfviewer/resources/test.pdf b/examples/pdf/pdfviewer/resources/test.pdf new file mode 100644 index 000000000..a9dc1bc29 Binary files /dev/null and b/examples/pdf/pdfviewer/resources/test.pdf differ diff --git a/examples/pdf/pdfviewer/viewer.qml b/examples/pdf/pdfviewer/viewer.qml index 586a822a0..a2bccab44 100644 --- a/examples/pdf/pdfviewer/viewer.qml +++ b/examples/pdf/pdfviewer/viewer.qml @@ -63,7 +63,7 @@ ApplicationWindow { color: "lightgrey" title: document.title visible: true - property alias source: document.source // for main.cpp + property string source // for main.cpp property real scaleStep: Math.sqrt(2) header: ToolBar { @@ -204,6 +204,7 @@ ApplicationWindow { x: searchDrawer.position * searchDrawer.width // TODO binding gets broken during centering document: PdfDocument { id: document + source: Qt.resolvedUrl(root.source) onStatusChanged: if (status === PdfDocument.Error) errorDialog.open() } searchString: searchField.text diff --git a/examples/pdf/pdfviewer/viewer.qrc b/examples/pdf/pdfviewer/viewer.qrc index 9698a2689..1b6fa52f7 100644 --- a/examples/pdf/pdfviewer/viewer.qrc +++ b/examples/pdf/pdfviewer/viewer.qrc @@ -1,6 +1,7 @@ viewer.qml + resources/document-open.svg resources/edit-clear.svg resources/edit-copy.svg resources/go-down-search.svg @@ -9,11 +10,11 @@ resources/go-up-search.svg resources/rotate-left.svg resources/rotate-right.svg + resources/test.pdf resources/zoom-in.svg resources/zoom-fit-best.svg resources/zoom-fit-width.svg resources/zoom-original.svg resources/zoom-out.svg - resources/document-open.svg diff --git a/src/pdf/qpdfdocument.cpp b/src/pdf/qpdfdocument.cpp index 42cd2492d..1e8a0f527 100644 --- a/src/pdf/qpdfdocument.cpp +++ b/src/pdf/qpdfdocument.cpp @@ -420,6 +420,8 @@ QPdfDocument::~QPdfDocument() QPdfDocument::DocumentError QPdfDocument::load(const QString &fileName) { + qCDebug(qLcDoc) << "loading" << fileName; + close(); d->setStatus(QPdfDocument::Loading); @@ -761,7 +763,7 @@ QPdfSelection QPdfDocument::getSelection(int page, QPointF start, QPointF end) return QPdfSelection(text, bounds); } - qDebug(qLcDoc) << page << start << "->" << end << "nothing found"; + qCDebug(qLcDoc) << page << start << "->" << end << "nothing found"; return QPdfSelection(); } diff --git a/src/pdf/quick/qquickpdfdocument.cpp b/src/pdf/quick/qquickpdfdocument.cpp index 6eb9d3ae4..1cfd9a9af 100644 --- a/src/pdf/quick/qquickpdfdocument.cpp +++ b/src/pdf/quick/qquickpdfdocument.cpp @@ -91,7 +91,10 @@ void QQuickPdfDocument::setSource(QUrl source) m_source = source; emit sourceChanged(); - m_doc.load(source.path()); + if (source.scheme() == QLatin1String("qrc")) + m_doc.load(QLatin1Char(':') + source.path()); + else + m_doc.load(source.path()); } /*! -- cgit v1.2.3