Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我不能用这个函数在Qt框架中打开另一个进程?_C++_Qt_Exe_Qprocess - Fatal编程技术网

C++ 为什么我不能用这个函数在Qt框架中打开另一个进程?

C++ 为什么我不能用这个函数在Qt框架中打开另一个进程?,c++,qt,exe,qprocess,C++,Qt,Exe,Qprocess,在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

在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->startwordPath更改为:

process->start(wordPath, QStringList());
这是同一个函数的重载,它可以工作。第二个参数应该是传递给要启动的新进程的参数。我能使单参数版本正常工作的唯一方法似乎是如果路径变量中有什么东西,因为explorer.exe和msconfig都可以工作。仅使用第二个QStringList(只是一个空列表)背后的故事是什么

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

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

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

您的路径C:/Program Files/Internet Explorer/iexplore.exe包含空格,因此当您使用第一个版本时,该程序将被解释为C:/Program with arguments Files/Internet and Explorer/iexplore.exe。
第二个版本将所有第一个参数视为程序,并将QStringList视为参数。

您的路径C:/program Files/Internet Explorer/iexplore.exe包含空格,因此当您使用第一个版本时,程序将被解释为C:/program with arguments Files/Internet and Explorer/iexplore.exe。
第二个版本将所有第一个参数视为程序,将QStringList视为参数。

来自Qt文档:

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

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

来自Qt文档:

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

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

多谢各位。因此,尽管有一个特定的重载函数来接受额外的参数,但单参数一个将在空格参数参数之后考虑任何新的进程。它接受完整的命令行,而不是可执行文件的名称。看。他们甚至特别建议不要使用这个函数,并提供了一个预处理器宏来完全禁止使用它。谢谢。因此,尽管有一个特定的重载函数来接受额外的参数,但单参数一个将在空格参数参数之后考虑任何新的进程。它接受完整的命令行,而不是可执行文件的名称。看。他们甚至特别建议不要使用这个函数,并提供一个预处理器宏来完全禁止使用它。