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にパスを渡す前に、変換に次の方法を使用する必要があります。
QUrl QUrl :: fromLocalFile(const QString&localFile)[static]
ローカルファイルとして解釈されるlocalFileのQUrl表現を返します。この関数は、スラッシュで区切られたパスと、このプラットフォームのネイティブセパレーターを受け入れます。
この関数は、「// servername/path/to/file.txt」のように、リモートファイルを示すために先頭にスラッシュ(または円記号)が2つ付いたパスも受け入れます。 QFile :: open()を使用して実際にこのファイルを開くことができるのは、特定のプラットフォームのみであることに注意してください。
QUrl url(newProjectFileDlg.fileUrl);
url.toLocalFile();
これはおそらくあなたが必要とするものです。あなたの場合、それは「C:/uuuu.a3」を返します。
QMLにこのようなものがないのはなんて迷惑なことでしょう。 QMLから呼び出すことができるヘルパー関数を作成しました。
Q_INVOKABLE QString convertUrlToNativeFilePath(const QUrl& urlStylePath) const;
これは単にこれを行います:
QString OurClassName::convertUrlToNativeFilePath(const QUrl& urlStylePath) const
{
return QDir::toNativeSeparators(urlStylePath.toLocalFile());
}