QTextImageHandler: Use QUrl::toLocalFile to convert to local file name

Simply stripping away the first six characters does not work on Windows.

Amends 2d87c4d881b74619fef966ffb0d7a00cb4ccea50

Pick-to: 6.5 6.2
Fixes: QTBUG-120577
Change-Id: If48ba026785cab784f46109e34ac80e39a990b79
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
(cherry picked from commit 52a41bac775bea9057acbc4344a29bb7e63297e3)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit 66b732244a3e396dfc5028da82321f10ac73e45b)
This commit is contained in:
Christian Ehrlicher 2024-01-09 20:19:12 +01:00 committed by Qt Cherry-pick Bot
parent 145e5d5787
commit e2f3608443
2 changed files with 9 additions and 7 deletions

View File

@ -23,12 +23,14 @@ static inline QString findAtNxFileOrResource(const QString &baseFileName,
{
// qt_findAtNxFile expects a file name that can be tested with QFile::exists.
// so if the format.name() is a file:/ or qrc:/ URL, then we need to strip away the schema.
QString localFile = baseFileName;
if (localFile.startsWith("file:/"_L1))
localFile = localFile.sliced(6);
else if (localFile.startsWith("qrc:/"_L1))
localFile = localFile.sliced(3);
QString localFile;
const QUrl url(baseFileName);
if (url.isLocalFile())
localFile = url.toLocalFile();
else if (baseFileName.startsWith("qrc:/"_L1))
localFile = baseFileName.sliced(3);
else
localFile = baseFileName;
extern QString qt_findAtNxFile(const QString &baseFileName, qreal targetDevicePixelRatio,
qreal *sourceDevicePixelRatio);
return qt_findAtNxFile(localFile, targetDevicePixelRatio, sourceDevicePixelRatio);

View File

@ -42,7 +42,7 @@ void tst_QTextImageHandler::loadAtNImages_data()
QTest::addColumn<QString>("imageFile");
QTest::addRow("file") << QFINDTESTDATA("data/image.png");
QTest::addRow("file_url") << QString("file:/") + QFINDTESTDATA("data/image.png");
QTest::addRow("file_url") << QUrl::fromLocalFile(QFINDTESTDATA("data/image.png")).toString();
QTest::addRow("resource") << ":/data/image.png";
QTest::addRow("qrc_url") << "qrc:/data/image.png";
}