我像这样从 Qml 获取文件路径:
mainView.projectFilePath = Qt.resolvedUrl(newProjectFileDlg.fileUrl).toString();
上面的文件路径如下所示:file:///C:/uuuu.a3
但是当这条路径被传递给 QFile 时,它会抱怨
The filename, directory name, or volume label syntax is incorrect
如何解决这个问题呢?
QUrl url(newProjectFileDlg.fileUrl);
url.toLocalFile();
这可能是您需要的。在您的情况下,它将返回“C:/uuuu.a3”。
QString 并不意味着规范的 url 表示。它是一个主要由于 utf 用例而存在的字符串类。
您正在寻找的是 QUrl,它适用于这样的用例。将您的路径传递给该路径,然后从中获取“QFile-readable”路径,然后将其传递给QFile。
在将路径传递给 QFile 之前,您需要使用以下方法进行转换:
QUrl QUrl::fromLocalFile(const QString & localFile) [静态]
返回 localFile 的 QUrl 表示,解释为本地文件。此函数接受由斜杠分隔的路径以及此平台的本机分隔符。
此函数还接受带有双斜杠(或反斜杠)的路径以指示远程文件,如“//servername/path/to/file.txt”。请注意,只有某些平台才能真正使用 QFile::open() 打开此文件。
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)