Я получаю путь к файлу из Qml следующим образом:
mainView.projectFilePath = Qt.resolvedUrl(newProjectFileDlg.fileUrl).toString();
Приведенный выше путь к файлу выглядит следующим образом: file: /// C: /uuuu.a3
Но когда этот путь передается в QFile, он жалуется
The filename, directory name, or volume label syntax is incorrect
Как решить эту проблему?
QString не предназначался для канонического представления URL. Это строковый класс, существующий в основном из-за сценариев использования utf.
То, что вы ищете, это QUrl, который предназначен для таких случаев использования, как этот. Передайте свой путь к этому, а затем извлеките из него путь «QFile-readable», а затем передайте его в QFile.
Вам нужно будет использовать следующий метод для преобразования перед передачей пути в QFile:
QUrl QUrl :: fromLocalFile (const QString & localFile) [статические]
Возвращает представление QUrl для localFile, интерпретируемого как локальный файл. Эта функция принимает пути, разделенные косой чертой, а также собственный разделитель для этой платформы.
Эта функция также принимает пути с двойной косой чертой (или обратной косой чертой) для обозначения удаленного файла, как в «//servername/path/to/file.txt». Обратите внимание, что только некоторые платформы могут открыть этот файл, используя QFile :: open ().
QUrl url(newProjectFileDlg.fileUrl);
url.toLocalFile();
Это, вероятно, то, что вам нужно. В вашем случае он вернет «C: /uuuu.a3».
Как досадно, что в QML нет такого материала. Я создал вспомогательную функцию, которую можно вызывать из QML:
Q_INVOKABLE QString convertUrlToNativeFilePath(const QUrl& urlStylePath) const;
Который просто делает это:
QString OurClassName::convertUrlToNativeFilePath(const QUrl& urlStylePath) const
{
return QDir::toNativeSeparators(urlStylePath.toLocalFile());
}
Посмотри на
QDir::toNativeSeparators(QString)