使用QProcess启动流程

时间:2010-04-12 14:39:49

标签: qt qprocess

我正在尝试使用QProcess启动Microsoft单词,如下所示:

QString program = "WINWORD.EXE";
process->start(program);

但没有任何反应。 winword.exe在路径上(所以当我输入winword.exe字时会打开)。 这是正确的方法吗?

6 个答案:

答案 0 :(得分:12)

可能是以下代码可以帮助您:

QProcess *process = new QProcess(this);
QString program = "explorer.exe";
QString folder = "C:\\";
process->start(program, QStringList() << folder);

我认为您正在尝试执行不包含在全局$ PATH窗口变量中的程序,这就是为什么winword.exe不会执行。

此外,您可能需要定义程序的绝对路径,例如:

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

答案 1 :(得分:5)

对我来说,我需要添加“characteres:

`m_process->start("\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\"");`

答案 2 :(得分:1)

来自Qt文档:

  

注意:流程已启动   异步,这意味着   started()和error()信号可能是   延迟。调用waitForStarted()来制作   确定该过程已经开始(或已经开始)   未能开始)和那些信号   已被释放。

将doc中提到的信号连接到某些GUI控件或调试输出,看看会发生什么。如果有错误,您应该使用QProcess :: error()检查错误类型。

答案 3 :(得分:0)

如果您尝试启动外部流程的方法在代码之后立即完成,例如:

void foo() {
    ...
    QString program = "WINWORD.EXE";
    process->start(program);
}

和变量

process

被声明为局部变量,它将在方法结束时被销毁,并且不会启动任何外部进程 - 或者你没有看到它,因为它会在启动后立即销毁。

这是我案中类似问题的原因。希望它有所帮助。

答案 4 :(得分:0)

您只需设置工作目录:

myProcess = new QProcess();
myProcess->setWorkingDirectory("C:\\Z-Programming_Source\\Java-workspace\\Encrypt1\\bin\\");

或者在开始时这样做:

myProcess->start("dir \"My Documents\"");

在开始()时,您可以输入控制台的命令...阅读手册。

我更喜欢第一种选择。更具可读性。

答案 5 :(得分:0)

foreach($object->toArray as $key=>$value){}