我试图从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源代码,他们在资源管理器窗口中使用类似的东西打开文件。他们成功打开路径中带有空格的文件,但我似乎无法重新创建它!
答案 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”
这是有效的,并将按预期进行。