使用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];


此后,提供的URL为以下格式:


  文件:/// C:/用户/[...]/test.xml
  
  文件:/// home / [...] /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
  
  /home/[...]/test.xml


第一个斜杠在Linux上有效,但在Windows上无效。如果我删除第一个斜杠,它将在Windows上有效,但在Linux上则无效。

问题是:

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

最佳答案

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

关于c++ - 使用`QUrl`作为文件路径提要到`std::fstream`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43178701/

10-10 05:44