我正在尝试使用QProcess
以下方式启动 Microsoft Word:
QString program = "WINWORD.EXE";
process->start(program);
但什么也没发生。
winword.exe
在路径上(所以当我输入 winword.exe 时,单词正在打开)。这是正确的方法吗?
下面的代码可能会对您有所帮助:
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() << "");
对我来说,我需要添加 " 字符:
m_process->start("\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\"");
来自 Qt 文档:
注意:进程是异步启动的,这意味着 started() 和 error() 信号可能会延迟。调用 waitForStarted() 以确保进程已启动(或未能启动)并且已发出这些信号。
将文档中提到的信号连接到一些 GUI 控件或调试输出,看看会发生什么。如果有错误,你应该使用 QProcess::error() 检查错误类型。
如果您尝试启动外部进程的方法在您的代码之后立即完成,例如:
void foo() {
...
QString program = "WINWORD.EXE";
process->start(program);
}
和变量
process
被声明为局部变量,它将在方法结束时被销毁,并且不会启动任何外部进程 - 或者正确地你不会看到它,因为它会在启动后立即被销毁。
在我的情况下,这是类似问题的原因。希望能帮助到你。
您可以设置工作目录:
myProcess = new QProcess();
myProcess->setWorkingDirectory("C:\\Z-Programming_Source\\Java-workspace\\Encrypt1\\bin\\");
或者在开始时执行:
myProcess->start("dir \"My Documents\"");
在 start() 您可以输入控制台命令...阅读手册。
我更喜欢第一个选项。更具可读性。
QProcess *pro = new QProcess;
QString s = "\"C:\Users\xyz\Desktop\Example.exe";
pro ->start(s);