使用`QUrl`将文件路径提供给`std :: fstream`

时间:2017-04-03 07:18:25

标签: c++ qt url

使用QFileDialog,允许用户浏览文件(用于打开),它会将文件列表返回为QUrl

QFileDialog dialog;
dialog.setFileMode(QFileDialog::ExistingFile);
dialog.setAcceptMode(QFileDialog::AcceptOpen);
if (!dialog.exec() || dialog.selectedUrls().size()==0) return;

QUrl url = dialog.selectedUrls()[0];

此后,提供的网址采用以下格式:

  

文件:/// C:/用户/ [...] /test.xml

     

文件:///家/ [...] /test.xml

这似乎不适用于std::ifstream所以我试图(联合国)规范化路径。为此,我尝试了以下方法:

QUrl nUrl = url.adjusted(QUrl::RemoveScheme | QUrl::RemovePassword | QUrl::RemoveUserInfo |
               QUrl::RemovePort| QUrl::RemoveAuthority | QUrl::RemoveQuery |
               QUrl::RemoveFragment | QUrl::StripTrailingSlash |
               QUrl::NormalizePathSegments);

以下列格式返回路径:

  

/ C:/用户/[...]/的test.xml

     

/家庭/[...]/的test.xml

第一个斜杠适用于Linux,但不适用于Windows。如果我删除第一个斜杠,它将在Windows上运行,但不适用于Linux。

问题是:

如何将QUrl可靠地转换为std::fstream接受的格式?

1 个答案:

答案 0 :(得分:2)

尝试使用QUrl :: toLocalPath而不是QUrl :: adjusted