Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QFile不';无法识别文件:///url路径格式_C++_Qt_Qml_Qtcore_Qurl - Fatal编程技术网

C++ QFile不';无法识别文件:///url路径格式

C++ QFile不';无法识别文件:///url路径格式,c++,qt,qml,qtcore,qurl,C++,Qt,Qml,Qtcore,Qurl,我从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表示

我从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可读”路径,然后将其传递给QFile

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

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

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

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

请查看
QDir::tonativeparator(QString)

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

Q_INVOKABLE QString convertUrlToNativeFilePath(const QUrl& urlStylePath) const;
这就是:

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

这是问题的正确答案,而不是公认的答案。对我来说,
QUrl(“file:///C:/myfile.txt)。toLocalFile()
执行到
“C:/myfile.txt”
的转换,而fromLocalFile似乎只是在
“file://“
前面加上前缀。还有,谢谢,这很有帮助
QString OurClassName::convertUrlToNativeFilePath(const QUrl& urlStylePath) const
{
    return QDir::toNativeSeparators(urlStylePath.toLocalFile());
}