【问题标题】:Why can't I open another process in Qt framework with this function?为什么我不能用这个功能在 Qt 框架中打开另一个进程?
【发布时间】:2017-12-27 09:55:52
【问题描述】:

在 Qt 框架中,我们应该能够使用 QProcess 打开另一个 .exe。当我单击按钮并调用回调时,以下内容不起作用:

void MainWindow::on_pushButton_clicked()
{
    QProcess *process = new QProcess(this);
    QString wordPath = "C:/Program Files/Internet Explorer/iexplore.exe";

    process->start(wordPath);
}

但是,如果我将 process->start(wordPath) 更改为:

process->start(wordPath, QStringList());

这是同一函数的重载,它可以工作。第二个参数应该是传递给您要启动的新进程的参数。我可以使单参数版本工作的唯一方法似乎是我的 PATH 变量中有什么东西,因为“explorer.exe”和“msconfig”都可以工作。仅使用第二个 QStringList()(它只是一个空列表)背后的故事是什么?

在另一个 SO 问题中,我看到一个用户专门添加了一个空字符串,如下所示:

QString wordPath = "C:\\Program Files\\Microsoft Office\\Office12\\WINWORD.EXE"
process->start(wordPath, QStringList() << "");

我很想知道这背后的原因。

【问题讨论】:

    标签: c++ qt exe qprocess


    【解决方案1】:

    您的路径“C:/Program Files/Internet Explorer/iexplore.exe”包含空格,因此当您使用第一个版本时,程序被解释为带有参数“Files/Internet”和“资源管理器/iexplore.exe”。 第二个版本将所有第一个参数视为程序,将 QStringList 视为参数。

    【讨论】:

    • 谢谢。因此,即使有一个特定的重载函数来接受额外的参数,单个参数也会考虑空格参数参数之后的任何内容到您启动的新进程?
    • 是的。它需要一个完整的命令行,而不是可执行文件的名称。请参阅docs。他们甚至特别建议不要使用此功能,并提供预处理器宏以完全禁止其使用。
    【解决方案2】:

    来自 Qt 文档:

    必须引用包含空格的参数才能正确地提供给新进程。

    试试 QString wordPath = "\"C:/Program Files/Internet Explorer/iexplore.exe\"";

    【讨论】:

      猜你喜欢
      • 2012-08-08
      • 2011-01-16
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      相关资源
      最近更新 更多