2011-02-26 6 views
2

1.) QT4 응용 프로그램을 다시 시작하고 싶습니다. 같은 응용 프로그램을 정상적으로 종료하고 시작할 수 있습니다.QT4 : 응용 프로그램을 다시 시작하는 방법은 무엇입니까? 설정을 재설정 하시겠습니까?

2.) 왜? 나는 모든 것을 "재설정"하는 옵션이 필요합니다. 응용 프로그램을 다시 시작하는 것이 가장 쉬운 방법 인 것 같습니다. 문제는 많은 수업과 모든 것이 있다는 것입니다. 나는 그 모든 설정을 표준으로 되돌릴 시간이 없다. 모든 textBox, 위젯을 지우려면 ... 나는 애플리케이션 재시작이 가장 좋은 방법이 아니라는 것을 알고있다. 다른 방법이 있다고 생각 하는가?

당신은

답변

1

당신이 클래스를 삭제하고 동일의 QApplication

2

1) 스크립트를 실행할 수 아래 주()에 새로 만들 나중에 응용 프로그램을 시작하려면 OS를 예약 할 수 감사합니다.

2) 모든 응용 프로그램 설정을 포함하는 별도의 클래스를 작성하십시오. 필요할 때마다 초기화하십시오.

2

재미있는 요청입니다. 그냥 "다시 시작"에 대한 종료 코드를 예약하고 (테스트되지 않은) 같은 것을 할 : 어디

int main(int argc, char **argv) 
{ 
QApplication app(argc, argv); 
... 
int ret = app.exec(); 
if (ret == EXIT_RESTART) { 
    ::execve(...); 
} 
return ret; 
} 

그런 다음 당신은 단지의 QApplication :: 출구 (EXIT_RESTART)를 호출 할 수 있습니다 그리고 당신은 갈 수 있어야한다. 또는 래퍼 스크립트를 사용하여 동일한 작업을 수행 할 수도 있습니다. 두 경우 모두 응용 프로그램에서 명령 줄 인수를 만족스럽게 처리해야합니다.

더 깨끗한 방법은 동일한 신호로 재설정해야하는 모든 항목을 연결하는 것입니다.

+0

여기에 "try-catch"를 사용할 수도 있습니다. 다시 시작할 때가되었다고 생각되면 알려진 예외를 throw하십시오. 충돌 조건에서도 재시동 할 수있는 이점이 있습니다. – j4x

+0

Qt는 일반적인 경우 예외와 잘 섞이지 않습니다. 일부 용도는 안전하지만 내가 아는 한 권장하지 않습니다. [Qt 예외 안전성] (http://doc.qt.nokia.com/4.6/exceptionsafety.html)을 참조하십시오. – Mat

1

그런 경우에는 위젯 등을 생성/초기화하는 모든 것들을 하나의 함수 (물론 하위 함수를 호출 할 수 있음)에 넣는 것이 좋습니다. 모든 것을 초기화해야 할 때 간단히 호출하십시오. 정확한 구현에 따라 먼저 항목을 삭제/해제해야 할 수 있습니다. 이 과정을 quiting 후 startDetached를 사용할 수있는 응용 프로그램을 다시 시작하기 위해

4

:이 방법은 PyQt는 작동

#include <QApplication> 
#include <QProcess> 

... 

// restart the app: 
qApp->quit(); 
QProcess::startDetached(qApp->arguments()[0], qApp->arguments()); 
+0

이 솔루션은 장치에서 작동하지 않습니다, 그것은 에뮬레이터에서만 작동하지만 노키아 E7에서는 다시 시작하지 않습니다. – abhishek

+1

저는 다양한 장치에 대해 잘 모릅니다. 그러나 Windows에서 테스트 한 결과 작동합니다 – deepmax

0

. 모든 설정을 지우고 깨끗한 설정으로 응용 프로그램을 다시 시작하기 위해이 파일을 작성했습니다. application_main이 주 방법이며, clearSettings은 설정을 지우는 슬롯입니다.

class GuiMain 

    #Most of implementation missing 

    def clearSettings(self): 
     """Deletes all settings, and restarts the application""" 
     #TODO: save changes 
     setting_store = QSettings() 
     setting_store.clear() 
     setting_store.sync() 
     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