Qt:QProcess结果在提示时不匹配结果

时间:2014-04-02 19:25:02

标签: c++ qt

我试图从Qt执行以下命令:

explorer /select,C:\Temp Folder\temp.wav

这应显示在资源管理器窗口中选择的文件temp.wav。从命令提示符运行时它可以正常工作。

但是,当我在Qt中尝试以下内容时:

QProcess::startDetached(
            "explorer",
            QStringList("/select,C:\\Temp Folder\\temp.wav")
            );

它不起作用 - 它打开资源管理器,但让我进入"我的文档"夹。如果我将文件夹重命名为没有空格的文件夹(TempFolder),它可以正常工作。

我尝试转义文件夹名称中的空格,在整个路径上放置引号,以及许多其他组合没有成功。许多组合在cmd中正常工作,但在通过QProcess::startDetached调用时似乎无效。

最令人困惑的部分是我尝试复制的代码来自QtCreator源代码,他们在资源管理器窗口中使用类似的东西打开文件。他们成功打开路径中带有空格的文件,但我似乎无法重新创建它!

1 个答案:

答案 0 :(得分:3)

当你打这样的电话时:

QProcess::startDetached("explorer",
                        QStringList("/select,C:\\Program Files\\7-Zip\\7z.exe"));

Qt将参数字符串转换为:

  

explorer“/ select,C:\ Program Files \ 7-Zip \ 7z.exe”

这不是打开资源管理器并选择给定文件的有效选项。发生这种情况,因为你的单个参数有空格,而Qt用引号转义它。 要解决此问题,您需要进行以下调用:

QProcess::startDetached("explorer",
           (QStringList() << "/select," << "C:\\Program Files\\7-zip\\7z.exe"));

即。传递两个参数。这将产生以下字符串:

  

explorer / select,“C:\ Program Files \ 7-Zip \ 7z.exe”

这是有效的,并将按预期进行。