我从Qml那里得到文件路径:
mainView.projectFilePath = Qt.resolvedUrl(newProjectFileDlg.fileUrl).toString();
上面的文件路径如下所示:file:/// C:/uuuu.a3
但是当这条路径传递给QFile时,它会抱怨
The filename, directory name, or volume label syntax is incorrect
如何解决这个问题?
答案 0 :(得分:21)
QUrl url(newProjectFileDlg.fileUrl);
url.toLocalFile();
这可能就是你所需要的。它会在你的情况下返回“C:/uuuu.a3”。
答案 1 :(得分:14)
QString不适用于规范网址表示。它是一个字符串类,主要是由于utf用例。
您正在寻找的是QUrl,它适用于此类用例。将您的路径传递给它,然后从中获取“QFile可读”路径,然后将其传递给QFile。
在将路径传递给QFile之前,您需要使用以下方法进行转换:
QUrl QUrl::fromLocalFile(const QString & localFile) [static]
返回localFile的QUrl表示形式,解释为本地文件。此函数接受由斜杠分隔的路径以及此平台的本机分隔符。
此函数还接受带有加倍前导斜杠(或反斜杠)的路径来指示远程文件,如“//servername/path/to/file.txt”中所示。请注意,只有某些平台可以使用QFile :: open()实际打开此文件。
答案 2 :(得分:4)
QML没有这个东西有多烦人。我创建了一个可以从QML中调用的辅助函数:
Q_INVOKABLE QString convertUrlToNativeFilePath(const QUrl& urlStylePath) const;
这就是:
QString OurClassName::convertUrlToNativeFilePath(const QUrl& urlStylePath) const
{
return QDir::toNativeSeparators(urlStylePath.toLocalFile());
}
答案 3 :(得分:-1)
看一看
QDir::toNativeSeparators(QString)