2014-01-07 117 views
13

我得到像设为Qml该文件路径:QFile时无法识别的文件:/// URL路径格式

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

上述文件的路径是这样的:文件:/// C:/ UUUU .a3

但是,当这个路径传递给QFile时,它抱怨

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

如何解决这个问题呢?

回答

12

QString不是为了规范的URL表示。这是一个主要由于utf用例而存在的字符串类。

你在找什么是QUrl这是为了这样的用例。通过你的路径,然后获得“QFile可读”路径,然后传递给QFile。

你需要传递的路径,一个QFile之前,请使用以下方法进行转换:

QUrl QUrl::fromLocalFile(const QString & localFile) [static]

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

该函数还接受具有加倍前导斜杠(或反斜杠)的路径来指示远程文件,如“//servername/path/to/file.txt”中所示。请注意,只有某些平台可以使用QFile :: open()实际打开此文件。

+4

对我来说,'QUrl(“文件:/// C:/myfile.txt “).toLocalFile();'转换为''C:/myfile.txt”',而来自LocalFile的文件似乎预先加载了'“file:///”'。另请参阅[下面的这个答案](http://stackoverflow.com/a/21837009/1619432)。 – handle

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

这可能是你所需要的。它会在你的情况下返回“C:/uuuu.a3”。

+1

这是对问题的正确答案,而不是接受的答案。 –

-1

看一看 QDir::toNativeSeparators(QString)

4

如何烦人,QML没有这个东西。我创建了一个辅助函数可以从QML调用:

Q_INVOKABLE QString convertUrlToNativeFilePath(const QUrl& urlStylePath) const; 

它只是做到这一点:

QString OurClassName::convertUrlToNativeFilePath(const QUrl& urlStylePath) const 
{ 
    return QDir::toNativeSeparators(urlStylePath.toLocalFile()); 
} 
+0

谢谢,这很有帮助 – arynaq

相关问题