Qt:QProcess 结果与提示时的结果不匹配

Qt: QProcess result doesn't match result at prompt

本文关键字:结果 不匹配 提示 QProcess Qt      更新时间:2023-10-16

我正在尝试从Qt执行以下命令:

explorer /select,C:Temp Foldertemp.wav

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

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

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

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

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

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

当您进行此类调用时:

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"

这是有效的,并且会做预期的事情。