21

我像这样从 Qml 获取文件路径:

mainView.projectFilePath = Qt.resolvedUrl(newProjectFileDlg.fileUrl).toString();

上面的文件路径如下所示:file:///C:/uuuu.a3

但是当这条路径被传递给 QFile 时,它​​会抱怨

The filename, directory name, or volume label syntax is incorrect

如何解决这个问题呢?

4

4 回答 4

34
QUrl url(newProjectFileDlg.fileUrl);
url.toLocalFile();

这可能是您需要的。在您的情况下,它将返回“C:/uuuu.a3”。

于 2014-02-17T18:51:05.197 回答
16

QString 并不意味着规范的 url 表示。它是一个主要由于 utf 用例而存在的字符串类。

您正在寻找的是 QUrl,它适用于这样的用例。将您的路径传递给该路径,然后从中获取“QFile-readable”路径,然后将其传递给QFile。

在将路径传递给 QFile 之前,您需要使用以下方法进行转换:

QUrl QUrl::fromLocalFile(const QString & localFile) [静态]

返回 localFile 的 QUrl 表示,解释为本地文件。此函数接受由斜杠分隔的路径以及此平台的本机分隔符。

此函数还接受带有双斜杠(或反斜杠)的路径以指示远程文件,如“//servername/path/to/file.txt”。请注意,只有某些平台才能真正使用 QFile::open() 打开此文件。

于 2014-01-07T12:19:21.130 回答
5

QML 没有这些东西是多么令人讨厌。我创建了一个可以从 QML 调用的辅助函数:

Q_INVOKABLE QString convertUrlToNativeFilePath(const QUrl& urlStylePath) const;

这只是这样做:

QString OurClassName::convertUrlToNativeFilePath(const QUrl& urlStylePath) const
{
    return QDir::toNativeSeparators(urlStylePath.toLocalFile());
}
于 2015-09-04T04:30:11.063 回答
-1

看一下 QDir::toNativeSeparators(QString)

于 2015-08-11T10:08:12.527 回答