如何重启我自己的qt应用程序?

Kla*_*aus 23 c++ qt qt4 application-restart

我只是问自己如何重启我自己的qt应用程序?

有人能告诉我一个例子吗?

mas*_*oud 45

要重启应用程序,请尝试:

#include <QApplication>
#include <QProcess>

...

// restart:
qApp->quit();
QProcess::startDetached(qApp->arguments()[0], qApp->arguments());
Run Code Online (Sandbox Code Playgroud)


tri*_*ger 8

要重新启动正在运行的 Qt 应用程序(至少在 Qt 5.15.2 中),您可以执行以下操作:

#include <QApplication>
#include <QProcess>

//...

QString program = qApp->arguments()[0];
QStringList arguments = qApp->arguments().mid(1); // remove the 1st argument - the program name
qApp->quit();
QProcess::startDetached(program, arguments);
Run Code Online (Sandbox Code Playgroud)


rub*_*nvb 5

我正在采取其他答案的解决方案,但更好。不需要指针,但是在构造语句;之后需要whilea do { ... } while( ... );

int main(int argc, char *argv[])
{
    const int RESTART_CODE = 1000;

    do
    {
        QApplication app(argc, argv);
        MainWindow main_window(app);
    } while( app.exec() == RESTART_CODE);

    return return_from_event_loop_code;
}
Run Code Online (Sandbox Code Playgroud)

  • +1,但也许您应该提到应用程序应该调用[`QCoreApplication :: exit(1000)`](http://doc.qt.nokia.com/latest/qcoreapplication.html#exit)才能真正重启。 (4认同)
  • 此解决方案是一种变通方法,并且具有先决条件。如果应用程序具有全局或静态变量,则不会重新初始化这些变量,但是真正的重新启动会进行初始化。 (2认同)

Pio*_*ost 1

看看qtcentre.org 上的How to restart an application thread,其中muisei给出了这段代码

#define RESTART_CODE 1000
int main(int argc, char *argv[])
{
  int return_from_event_loop_code;
  QPointer<QApplication> app;
  QPointer<MainWindow> main_window;
  do
  {
    if(app) delete app;
    if(main_window) delete main_window;

    app = new QApplication(argc, argv);
    main_window = new MainWindow(app);
    return_from_event_loop_code = app->exec();
  }
  while(return_from_event_loop_code==RESTART_CODE)

  return return_from_event_loop_code;
}
Run Code Online (Sandbox Code Playgroud)