8

我正在尝试使用QProcess以下方式启动 Microsoft Word:

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

但什么也没发生。 winword.exe在路径上(所以当我输入 winword.exe 时,单词正在打开)。这是正确的方法吗?

4

6 回答 6

16

下面的代码可能会对您有所帮助:

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

我认为您正在尝试执行不包含在全局 $PATH windows 变量中的程序,这就是 winword.exe 不执行的原因。

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

QString wordPath = "C:\\Program Files\\Microsoft Office\\Office12\\WINWORD.EXE"
process->start(wordPath, QStringList() << "");
于 2010-04-12T16:04:32.293 回答
6

对我来说,我需要添加 " 字符:

m_process->start("\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\"");
于 2014-02-18T10:32:34.730 回答
1

来自 Qt 文档:

注意:进程是异步启动的,这意味着 started() 和 error() 信号可能会延迟。调用 waitForStarted() 以确保进程已启动(或未能启动)并且已发出这些信号。

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

于 2010-04-12T14:54:52.907 回答
1

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

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

和变量

process

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

在我的情况下,这是类似问题的原因。希望能帮助到你。

于 2013-08-20T15:59:28.767 回答
0

您可以设置工作目录:

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

或者在开始时执行:

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

在 start() 您可以输入控制台命令...阅读手册。

我更喜欢第一个选项。更具可读性。

于 2015-08-06T01:04:04.790 回答
0
QProcess *pro = new QProcess;
QString s = "\"C:\Users\xyz\Desktop\Example.exe";
pro ->start(s);
于 2018-09-21T09:59:26.947 回答