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 で読み取り可能な」パスを取得し、それを QFile に渡します。

パスを QFile に渡す前に、変換に次のメソッドを使用する必要があります。

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

ローカル ファイルとして解釈された localFile の QUrl 表現を返します。この関数は、スラッシュで区切られたパスと、このプラットフォームのネイティブ セパレーターを受け入れます。

この関数は、"//servername/path/to/file.txt" のように、リモート ファイルを示すために先頭のスラッシュ (またはバックスラッシュ) が 2 つ付いたパスも受け入れます。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 に答える