Qt 执行外部程序

Qt Execute external program

本文关键字:程序 外部 执行 Qt      更新时间:2023-10-16

我想从我的QT程序启动一个外部程序。唯一有效的解决方案是:

system("start explorer.exe");

但它仅适用于 Windows 并启动命令行片刻。

我尝试的下一件事是:

QProcess process;
QString file = QDir::homepath + "file.exe";
process.start(file);
//process.execute(file); //i tried as well

但什么也没发生。有什么想法吗?

如果你的process对象是堆栈上的变量(例如在方法中),代码将无法按预期工作,因为你已经开始的进程将在方法完成后在QProcess的析构函数中被杀死。

void MyClass::myMethod()
{
    QProcess process;
    QString file = QDir::homepath + "file.exe";
    process.start(file);
}

相反,您应该像这样在堆上分配QProcess对象:

QProcess *process = new QProcess(this);
QString file = QDir::homepath + "/file.exe";
process->start(file);

如果您希望程序在进程执行时等待并且只需要获取其退出代码,则可以使用

QProcess::execute(file);
QProcess::exitCode(); // returns the exit code

而不是像这样异步使用进程。

QProcess process;
process.start(file);

请注意,您还可以阻止执行,直到进程完成。为了做到这一点,请使用

process.waitForFinished();

过程开始后。

QDir::homePath 不以分隔符结尾。可执行文件的有效路径

QString file = QDir::homePath + QDir::separator + "file.exe";

只需使用 QProcess::startDetached ; 它是静态的,你不需要担心等待它完成或在堆上分配东西或类似的东西:

QProcess::startDetached(QDir::homepath + "/file.exe");

它是QProcess::execute的分离对应物.

截至 5.15,该表单已经过时(但仍然存在)。新的首选调用与上述调用相同,但第二个参数QStringList命令行参数。如果您没有任何要传递的参数,只需传递一个空列表。