diff options
Diffstat (limited to 'src/pdfquick/qquickpdfdocument.cpp')
-rw-r--r-- | src/pdfquick/qquickpdfdocument.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/pdfquick/qquickpdfdocument.cpp b/src/pdfquick/qquickpdfdocument.cpp index 368725a8e..9770900db 100644 --- a/src/pdfquick/qquickpdfdocument.cpp +++ b/src/pdfquick/qquickpdfdocument.cpp @@ -8,6 +8,7 @@ #include <QtQml/qqmlcontext.h> #include <QtQml/qqmlengine.h> #include <QtQuick/qquickitem.h> +#include <QtQml/qqmlfile.h> QT_BEGIN_NAMESPACE @@ -35,15 +36,18 @@ QQuickPdfDocument::QQuickPdfDocument(QObject *parent) /*! \internal */ -QQuickPdfDocument::~QQuickPdfDocument() = default; +QQuickPdfDocument::~QQuickPdfDocument() +{ + delete m_carrierFile; +}; void QQuickPdfDocument::classBegin() { m_doc = static_cast<QPdfDocument *>(qmlExtendedObject(this)); Q_ASSERT(m_doc); - connect(m_doc, &QPdfDocument::passwordChanged, this, [this]() { - if (resolvedSource().isValid() && resolvedSource().isLocalFile()) - m_doc->load(resolvedSource().path()); + connect(m_doc, &QPdfDocument::passwordChanged, this, [this]() -> void { + if (resolvedSource().isValid()) + m_doc->load(QQmlFile::urlToLocalFileOrQrc(resolvedSource())); }); connect(m_doc, &QPdfDocument::statusChanged, this, [this] (QPdfDocument::Status status) { emit errorChanged(); @@ -68,15 +72,14 @@ void QQuickPdfDocument::setSource(QUrl source) m_source = source; m_maxPageWidthHeight = QSizeF(); - m_carrierFile->deleteLater(); + if (m_carrierFile) + m_carrierFile->deleteLater(); m_carrierFile = nullptr; emit sourceChanged(); const QQmlContext *context = qmlContext(this); m_resolvedSource = context ? context->resolvedUrl(source) : source; - if (source.scheme() == QLatin1String("qrc")) - m_doc->load(QLatin1Char(':') + m_resolvedSource.path()); - else - m_doc->load(m_resolvedSource.toLocalFile()); + if (m_resolvedSource.isValid()) + m_doc->load(QQmlFile::urlToLocalFileOrQrc(m_resolvedSource)); } /*! |