diff options
| -rw-r--r-- | src/quick/items/qquicktextedit.cpp | 17 | ||||
| -rw-r--r-- | tests/auto/quick/qquicktextedit/CMakeLists.txt | 11 | ||||
| -rw-r--r-- | tests/auto/quick/qquicktextedit/data/embeddedImageResource.qml | 6 | ||||
| -rw-r--r-- | tests/auto/quick/qquicktextedit/data/green-16x16.png | bin | 0 -> 92 bytes | |||
| -rw-r--r-- | tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp | 35 |
5 files changed, 58 insertions, 11 deletions
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp index 03e5c14ba1..04dd55237e 100644 --- a/src/quick/items/qquicktextedit.cpp +++ b/src/quick/items/qquicktextedit.cpp @@ -2325,6 +2325,23 @@ QVariant QQuickTextEdit::loadResource(int type, const QUrl &source) return {}; } + // If the image is in resources, load it here, because QTextDocument::loadResource() doesn't do that + if (!url.scheme().compare("qrc"_L1, Qt::CaseInsensitive)) { + // qmlWarning if the file doesn't exist + QFile f(QQmlFile::urlToLocalFileOrQrc(url)); + if (f.open(QFile::ReadOnly)) { + QByteArray buf = f.readAll(); + f.close(); + QImage image; + image.loadFromData(buf); + if (!image.isNull()) + return image; + } + // if we get here, loading failed + qmlWarning(this) << "Cannot read resource: " << f.fileName(); + return {}; + } + // see if we already started a load job auto existingJobIter = std::find_if( d->pixmapsInProgress.cbegin(), d->pixmapsInProgress.cend(), diff --git a/tests/auto/quick/qquicktextedit/CMakeLists.txt b/tests/auto/quick/qquicktextedit/CMakeLists.txt index 76ac64d876..3ceded6dca 100644 --- a/tests/auto/quick/qquicktextedit/CMakeLists.txt +++ b/tests/auto/quick/qquicktextedit/CMakeLists.txt @@ -33,6 +33,17 @@ qt_internal_add_test(tst_qquicktextedit TESTDATA ${test_data} ) +# Resources: +set(resources_resource_files + "data/green-16x16.png" +) + +qt_internal_add_resource(tst_qquicktextedit "resources" + PREFIX + "/" + FILES + ${resources_resource_files} +) ## Scopes: ##################################################################### diff --git a/tests/auto/quick/qquicktextedit/data/embeddedImageResource.qml b/tests/auto/quick/qquicktextedit/data/embeddedImageResource.qml new file mode 100644 index 0000000000..976b12725e --- /dev/null +++ b/tests/auto/quick/qquicktextedit/data/embeddedImageResource.qml @@ -0,0 +1,6 @@ +import QtQuick 2.0 + +TextEdit { + textFormat: TextEdit.RichText + text: "<img src='qrc:/data/green-16x16.png'>" +} diff --git a/tests/auto/quick/qquicktextedit/data/green-16x16.png b/tests/auto/quick/qquicktextedit/data/green-16x16.png Binary files differnew file mode 100644 index 0000000000..e19a3ffddd --- /dev/null +++ b/tests/auto/quick/qquicktextedit/data/green-16x16.png diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp index c8377aa2d3..bf7c2a97c8 100644 --- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp +++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp @@ -6018,20 +6018,26 @@ void tst_qquicktextedit::embeddedImages_data() { QTest::addColumn<QUrl>("qmlfile"); QTest::addColumn<QString>("error"); - QTest::newRow("local") << testFileUrl("embeddedImagesLocal.qml") << ""; + QTest::addColumn<QSize>("expectedImageSize"); + + QTest::newRow("local") << testFileUrl("embeddedImagesLocal.qml") << "" << QSize(100, 100); QTest::newRow("local-error") << testFileUrl("embeddedImagesLocalError.qml") - << testFileUrl("embeddedImagesLocalError.qml").toString()+":3:1: QML TextEdit: Cannot open: " + testFileUrl("http/notexists.png").toString(); - QTest::newRow("local-relative") << testFileUrl("embeddedImagesLocalRelative.qml") << ""; - QTest::newRow("remote") << testFileUrl("embeddedImagesRemote.qml") << ""; + << testFileUrl("embeddedImagesLocalError.qml").toString()+":3:1: QML TextEdit: Cannot open: " + testFileUrl("http/notexists.png").toString() + << QSize(); + QTest::newRow("local-relative") << testFileUrl("embeddedImagesLocalRelative.qml") << "" << QSize(100, 100); + QTest::newRow("remote") << testFileUrl("embeddedImagesRemote.qml") << "" << QSize(100, 100); QTest::newRow("remote-error") << testFileUrl("embeddedImagesRemoteError.qml") - << testFileUrl("embeddedImagesRemoteError.qml").toString()+":3:1: QML TextEdit: Error transferring {{ServerBaseUrl}}/notexists.png - server replied: Not found"; - QTest::newRow("remote-relative") << testFileUrl("embeddedImagesRemoteRelative.qml") << ""; + << testFileUrl("embeddedImagesRemoteError.qml").toString()+":3:1: QML TextEdit: Error transferring {{ServerBaseUrl}}/notexists.png - server replied: Not found" + << QSize(); + QTest::newRow("remote-relative") << testFileUrl("embeddedImagesRemoteRelative.qml") << "" << QSize(100, 100); + QTest::newRow("resource") << testFileUrl("embeddedImageResource.qml") << "" << QSize(16, 16); } void tst_qquicktextedit::embeddedImages() { QFETCH(QUrl, qmlfile); QFETCH(QString, error); + QFETCH(QSize, expectedImageSize); TestHTTPServer server; QVERIFY2(server.listen(), qPrintable(server.errorString())); @@ -6056,12 +6062,19 @@ void tst_qquicktextedit::embeddedImages() QTRY_COMPARE(textObject->resourcesLoading(), 0); - QPixmap pm(testFile("http/exists.png")); - if (error.isEmpty()) { - QCOMPARE(textObject->width(), pm.width()); - QCOMPARE(textObject->height(), pm.height()); + if (expectedImageSize.isValid()) { + QTextDocument *doc = textObject->textDocument()->textDocument(); + QVERIFY(doc); + const auto formats = doc->allFormats(); + const auto it = std::find_if(formats.begin(), formats.end(), [](const auto &format){ + return format.objectType() == QTextFormat::ImageObject; + }); + QCOMPARE_NE(it, formats.end()); + const QTextImageFormat format = (*it).toImageFormat(); + QImage image = doc->resource(QTextDocument::ImageResource, format.name()).value<QImage>(); + qCDebug(lcTests) << "found image?" << format.name() << image; + QCOMPARE(image.size(), expectedImageSize); } else { - QVERIFY(16 != pm.width()); // check test is effective QCOMPARE(textObject->width(), 16); // default size of QTextDocument broken image icon QCOMPARE(textObject->height(), 16); } |
