在Qt和C++中从另一个应用程序启动一个应用软件会产生问题

Starting one Application from another Application in Qt and C++ does Problems

本文关键字:一个 应用软件 问题 C++ Qt 启动 应用程序 另一个      更新时间:2023-10-16

我用QtCreator和C++编写了一个qt快速桌面应用程序。

我想从我的应用程序启动另一个应用程序。我搜索并找到了这些选项:Qprocess,具有以下功能:start、startDetached和execute。

我要启动的应用程序是一个单独的应用程序,其他人建议我使用startDetached函数。

我选择了startDetached函数的这个选项:

bool startDetached ( const QString & program, const QStringList & arguments, const QString & workingDirectory, qint64 * pid = 0 )

这是我的代码:

QProcess *process=new QProcess(this);
bool res;
QStringList argsList;
argsList.append("-start");
process->startDetached(emulauncherInstallationDirectory + "\Emulauncher.exe",argsList,emulauncherInstallationDirectory);
res = process->waitForFinished();
delete process;
process=NULL;
return res;

但是当我运行我的应用程序时,它有时工作得很好,而在其他时候根本不工作。

我调试了很多次,看到的功能

process->waitForFinished();

返回false或true,没有明显的原因:在所有时间里,.exe文件都在它的位置上,如果我从命令行运行它,或者双击文件,它运行得很好,但从我的应用程序来看,它有时运行得好,有时真的不运行。

有人知道这个奇怪问题的任何原因或解决方案吗?

任何答复都将不胜感激。

来自文档:

bool QProcess::waitForFinished(int msecs=30000)

如果进程已完成,则返回true;否则返回false(如果如果发生错误,或者如果此QProcess已完成)。

因此,如果进程在30秒内完成,则process->waitForFinished();返回true,否则返回false。

如果您根本不想超时,请使用process->waitForFinished(-1);

这可能是超时问题吗?默认情况下,waitForFinished()等待30秒:

bool QProcess::waitForFinished(int msecs=30000)

块,直到进程完成并发出finished()信号,或者直到毫秒过去。

如果进程已完成,则返回true;否则返回false(如果操作超时、发生错误或此QProcess已完成)。

此函数可以在没有事件循环的情况下运行。它在编写非GUI应用程序和在非GUI线程中执行I/O操作时非常有用。

警告:从主(GUI)线程调用此函数可能会导致用户界面冻结。

如果毫秒为-1,此功能将不会超时。

如果您想永远等待,则应该使用waitForFinished(-1)

相关文章: