una solucion saber reiniciar publicidad programar programa para juego ibuildapp gratis detuvo desde descargar crear como cero app aplicaciones c++ qt qt4 application-restart

c++ - solucion - ibuildapp



¿Cómo reiniciar mi propia aplicación qt? (8)

me pregunto cómo reiniciar mi propia aplicación qt?

¿Alguien puede mostrarme un ejemplo?


Aquí está el código:

main.cpp:

int main(int argc, char *argv[]) { int currentExitCode = 0; do { QApplication a(argc, argv); MainWindow w; w.show(); currentExitCode = a.exec(); } while( currentExitCode == MainWindow::EXIT_CODE_REBOOT ); return currentExitCode; }

mainwindow.h

class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); static int const EXIT_CODE_REBOOT;//THIS IS THE IMPORTANT THING TO ADD TO YOUR CODE ~MainWindow(); private slots: void slotReboot();//AND THIS ALSO //ALL THE OTHER VARIABLES }

El slotReboot() es el slot que recibirá la señal del QAction que voy a mostrar en mainwindow.cpp

mainwindow.cpp

Primero inicializa EXIT_CODE_REBOOT :

int const MainWindow::EXIT_CODE_REBOOT = -123456789;

y declarar un puntero QAction :

QAction* actionReboot;

luego en el constructor MainWindow :

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); actionReboot = new QAction( this ); actionReboot->setText( tr("Restart") ); actionReboot->setStatusTip( tr("Restarts the application") ); connect( actionReboot, SIGNAL (triggered()),this, SLOT (slotReboot())); }

Y finalmente necesita enviar la señal (en la parte de su código que necesita), de esta manera:

actionReboot->trigger();

Hice el código que mostré siguiendo estas instrucciones: Cómo hacer una aplicación reiniciable - Qt Wiki


Eche un vistazo a Cómo reiniciar una secuencia de aplicación en qtcentre.org, donde muisei proporciona este código

#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; }


Estoy tomando las soluciones de otras respuestas, pero mejor. No es necesario punteros, pero hay una necesidad de ; después de la instrucción while de do { ... } while( ... ); construir.

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; }


Acabo de utilizar el método descrito anteriormente y noté que mi aplicación falla al reiniciar. ... luego cambié las siguientes líneas de código:

if(app) delete app; if(main_window) delete main_window;

a:

if(main_window) delete main_window; if(app) delete app;

y se comporta bien Por alguna razón, la ventana debe borrarse primero. Solo una nota para lectores futuros.

EDIT: ... y un enfoque diferente para aquellos que quieren un proceso real: reiniciar: puede declarar un método myApp :: Restart () en su subclase de QApplication. La siguiente versión funciona bien tanto en MS-Windows como en MacOS:

// Restart Application void myApp::Restart(bool Abort) { // Spawn a new instance of myApplication: QProcess proc; #ifdef Q_OS_WIN proc.start(this->applicationFilePath()); #endif #ifdef Q_OS_MAC // In Mac OS the full path of aplication binary is: // <base-path>/myApp.app/Contents/MacOS/myApp QStringList args; args << (this->applicationDirPath() + "/../../../myApp.app"); proc.start("open", args); #endif // Terminate current instance: if (Abort) // Abort Application process (exit immediattely) ::exit(0); else this->exit(0); // Exit gracefully by terminating the myApp instance }


Para reiniciar la aplicación, intente:

#include <QApplication> #include <QProcess> ... // restart: qApp->quit(); QProcess::startDetached(qApp->arguments()[0], qApp->arguments());


Esta pequeña variación en la idea de Rubenvb funciona con PyQt. clearSettings es el método que desencadena el reinicio.

class GuiMain #Most of implementation missing def clearSettings(self): #Clearing the settings missing QApplication.exit(GuiMain.restart_code) restart_code = 1000 @staticmethod def application_main(): """ The application''s main function. Create application and main window and run them. """ while True: app = QApplication(sys.argv) window = GuiMain() window.show() ret = app.exec_() if ret != GuiMain.restart_code: break del window del app


Suponiendo que 1337 es su código de reinicio:

main.cxx

int main(int argc, char * argv[]) { int result = 0; do { QCoreApplication coreapp(argc, argv); MyClass myObj; result = coreapp.exec(); } while( result == 1337 ); return result; }

myClass.cxx

qApp->exit(1337);


Realizando un verdadero proceso de reinicio sin subclases:

QCoreApplication a(argc, argv); int returncode = a.exec(); if (returncode == -1) { QProcess* proc = new QProcess(); proc->start(QCoreApplication::applicationFilePath()); } return returncode;

Edite para Mac OS como en el ejemplo anterior.

Para reiniciar la llamada

QCoreApplication::exit(-1);

en algún lugar de tu código.