aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquicktextedit.cpp17
-rw-r--r--tests/auto/quick/qquicktextedit/CMakeLists.txt11
-rw-r--r--tests/auto/quick/qquicktextedit/data/embeddedImageResource.qml6
-rw-r--r--tests/auto/quick/qquicktextedit/data/green-16x16.pngbin0 -> 92 bytes
-rw-r--r--tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp35
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
new file mode 100644
index 0000000000..e19a3ffddd
--- /dev/null
+++ b/tests/auto/quick/qquicktextedit/data/green-16x16.png
Binary files differ
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);
}