【问题标题】:Qt: QProcess result doesn't match result at promptQt:QProcess 结果与提示时的结果不匹配
【发布时间】:2014-04-03 04:18:13
【问题描述】:

我正在尝试从 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 源代码,他们使用类似的东西在资源管理器窗口中打开文件。他们成功打开了路径中有空格的文件,但我似乎无法重新创建它!

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    当您拨打此类电话时:

    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"

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多