【问题标题】:Open external application and close current application打开外部应用程序并关闭当前应用程序
【发布时间】:2013-11-11 03:29:54
【问题描述】:

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

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

这就是我所做的:

QDesktopServices::openUrl(QUrl("file:update.exe"));
qApp->quit();

在更新程序中,我还在更新开始前添加了一个 2 秒睡眠定时器,以防万一。问题是主程序永远不会关闭。

我已将 qApp->quit() 替换为 qApp->exit、QApplication::quit()、QCoreApplication::exit() 等,并且没有关闭主程序。

有什么建议吗?

【问题讨论】:

    标签: c++ qt user-interface exit


    【解决方案1】:

    您可以尝试执行以下操作(希望从源代码中可以清楚地了解想法):

    // 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"
    

    【讨论】:

    • 小问题,这将如何关闭主程序?
    • @mc360pro,好吧,我已经更新了代码,以便在启动初始应用程序后 5 秒后启动另一个应用程序。最初的应用程序。将比关闭。
    • 我必须在自动取款机下车,但我会尽快尝试并回复您:)
    • 应该可以。所以在更新程序的情况下,您应该将调用进程的路径传递给更新程序,以确保更新完成后它可以再次启动相同的应用程序
    • 就我而言,由于某种原因,我无法关闭我的应用程序。我注释掉了任何做更新程序的事情。它只是没有关闭。
    【解决方案2】:

    试试这个:

    #include <QApplication>
    #include <QProcess>
    
    qApp->quit();
    QProcess::startDetached("update.exe");
    

    【讨论】:

    • 应用程序没有关闭:/
    • qApp-&gt;quit(); 仅在QApplication::exec() 通话后才能工作,我认为。
    • 我在 qApp->quit() 之前添加了 qapplication::exec() 并且它没有关闭。相反,它仅在我手动关闭时才打开 update.exe。
    • @mc360pro,是的,因为exec() 在应用程序运行时阻塞。仅当您关闭应用程序时才会调用 Next 语句。
    • 使用QProcess::startDetached 而不是exec
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2012-04-06
    • 2015-11-26
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多