diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index f3934210797..09b7c4fce31 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -2449,6 +2449,11 @@ QString QCoreApplication::applicationFilePath() return d->cachedApplicationFilePath; QString absPath = qAppFileName(); + if (Q_LIKELY(!absPath.isEmpty())) { // Darwin, FreeBSD, Linux, Windows + // the OS has canonicalized for us + return d->cachedApplicationFilePath = std::move(absPath); + } + if (absPath.isEmpty() && !arguments().isEmpty()) { QString argv0 = QFile::decodeName(arguments().at(0).toLocal8Bit()); diff --git a/src/corelib/kernel/qcoreapplication_mac.cpp b/src/corelib/kernel/qcoreapplication_mac.cpp index af047fe8cde..982672caa57 100644 --- a/src/corelib/kernel/qcoreapplication_mac.cpp +++ b/src/corelib/kernel/qcoreapplication_mac.cpp @@ -12,6 +12,7 @@ QT_BEGIN_NAMESPACE *****************************************************************************/ QString qAppFileName() { + // QCoreApplication::applicationFilePath() expects a canonical path static QString appFileName; if (appFileName.isEmpty()) { QCFType bundleURL(CFBundleCopyExecutableURL(CFBundleGetMainBundle())); diff --git a/src/corelib/kernel/qcoreapplication_win.cpp b/src/corelib/kernel/qcoreapplication_win.cpp index 9011e3fe9e6..2cdf0d57d46 100644 --- a/src/corelib/kernel/qcoreapplication_win.cpp +++ b/src/corelib/kernel/qcoreapplication_win.cpp @@ -5,6 +5,7 @@ #include "qcoreapplication.h" #include "qcoreapplication_p.h" #include "qstringlist.h" +#include "qdir.h" #include "qfileinfo.h" #ifndef QT_NO_QOBJECT #include "qmutex.h" @@ -52,7 +53,10 @@ QString qAppFileName() // get application file name v = GetModuleFileName(hInstance, space.data(), DWORD(space.size())); } while (Q_UNLIKELY(v >= size)); - return QString::fromWCharArray(space.data(), v); + // QCoreApplication::applicationFilePath() expects a canonical path with + // Qt-style separators + QStringView nativePath(space.data(), v); + return QDir::fromNativeSeparators(nativePath.toString()); } QString QCoreApplicationPrivate::appName() const