Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 打开外部应用程序并关闭当前应用程序_C++_Qt_User Interface_Exit - Fatal编程技术网

C++ 打开外部应用程序并关闭当前应用程序

C++ 打开外部应用程序并关闭当前应用程序,c++,qt,user-interface,exit,C++,Qt,User Interface,Exit,在我的gui项目中,我需要启动另一个应用程序来更新称为初始更新的应用程序。。如果这有道理的话 辅助程序更新主程序的唯一方法是主程序关闭 这就是我所做的: QDesktopServices::openUrl(QUrl("file:update.exe")); qApp->quit(); 在更新程序中,我还在更新开始前添加了一个2秒的睡眠计时器,以防万一。问题是主程序从未关闭 我已经用qApp->exit、QApplication::quit()、QCoreApplication::exit

在我的gui项目中,我需要启动另一个应用程序来更新称为初始更新的应用程序。。如果这有道理的话

辅助程序更新主程序的唯一方法是主程序关闭

这就是我所做的:

QDesktopServices::openUrl(QUrl("file:update.exe"));
qApp->quit();
在更新程序中,我还在更新开始前添加了一个2秒的睡眠计时器,以防万一。问题是主程序从未关闭

我已经用qApp->exit、QApplication::quit()、QCoreApplication::exit()等替换了qApp->quit(),并且没有任何东西关闭主程序

有什么建议吗?

试试这个:

#include <QApplication>
#include <QProcess>

qApp->quit();
QProcess::startDetached("update.exe");
#包括
#包括
qApp->quit();
QProcess::StartDetailed(“update.exe”);

您可以尝试执行以下操作(希望源代码中的想法很清楚):


应用程序未关闭:/
qApp->quit()只有在调用
QApplication::exec()之后才能工作。我在qApp->quit()之前添加了QApplication::exec(),但它没有关闭。相反,当我手动关闭update.exe时,它才打开它。@mc360pro,是的,因为
exec()
在应用程序运行时会阻塞。只有在关闭应用程序时才会调用下一个语句。请使用
QProcess::startDetached
而不是
exec
。快速提问,这将如何关闭主程序?@mc360pro,我已经更新了代码,以便它在启动初始应用程序5秒钟后启动另一个应用程序。最初的应用程序。将于关闭。我必须从自动取款机上下车,但我会尽快试用,然后给你回复:)这应该行得通。因此,对于更新程序,您应该将调用过程的路径传递给更新程序,以使舒尔it能够在更新完成后再次启动相同的应用程序。在我的情况下,由于某些原因,我无法关闭我的应用程序。我注释掉了更新程序的所有内容。它就是关不上。
// Launches another application after 5 seconds.
class Launcher : public QObject
{
    Q_OBJECT
public:
    Launcher()
    {
        QTimer::singleShot(5000, this, SLOT(launch()));
    }
private slots:
    void launch()
    {
        QProcess::startDetached("notepad");
        qApp->quit();
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    Launcher launcher;

    [..]

    return app.exec();
}

#include "main.moc"