【问题标题】:QFile doesn't recognize file:/// url path formatQFile 无法识别 file:/// url 路径格式
【发布时间】:2014-01-25 02:55:48
【问题描述】:

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

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

上面的文件路径是这样的:file:///C:/uuuu.a3

但是当这个路径被传递给QFile时,它会报错

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

如何解决这个问题?

【问题讨论】:

    标签: c++ qt qml qtcore qurl


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 对我来说,QUrl( "file:///C:/myfile.txt" ).toLocalFile(); 将转换为"C:/myfile.txt",而 fromLocalFile 似乎只是在前面加上"file:///"。另见this answer below
    【解决方案2】:
    QUrl url(newProjectFileDlg.fileUrl);
    url.toLocalFile();
    

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

    【讨论】:

    • 这是问题的正确答案,不是公认的。
    【解决方案3】:

    看看 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());
      }
      

      【讨论】:

      • 谢谢,这很有帮助
      猜你喜欢
      • 1970-01-01
      • 2018-05-25
      • 2016-09-11
      • 2015-04-19
      • 2019-07-20
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多