2017-11-29 7 views
0

나는 Qt 초보자이며 Qt을 기반으로 한 사용자 인터페이스 라이브러리를 개발 중입니다. 주 QApplicationsetUp에 시작하고 tearDown에 닫으므로 테스트 사이에 누출되는 이벤트 나 기타 문제가 없습니다. 여기 내 setUp/tearDown 방법은 이제 : `unittest` 프레임 워크에서`QApplication`을 멈추고 다시 시작하는 방법은 무엇입니까?

class _QtTest(unittest.TestCase): 
    def setUp(self): 
     """Set up a QAppplication on each test case.""" 
     try: 
      QApplication = QtGui.QApplication 
     except AttributeError: 
      QApplication = QtWidgets.QApplication 

     self.qt_app = QApplication.instance() 
     if self.qt_app is None: 
      self.qt_app = QApplication(sys.argv) 

    def tearDown(self): 
     """Clear the QApplication's event queue.""" 
     # After each test, empty the event queue. 
     # This should help to make sure that there aren't any event-based race 
     # conditions where a C/C++ object is deleted before a slot is called. 
     self.qt_app.sendPostedEvents() 
     self.qt_app.quit() 

불행하게도 마지막 self.qt_app.quit() 모든 연속적인 테스트를 영구적으로 QApplication를 종료 할 것으로 보인다. setUp 방법으로 새 ​​ QApplication을 다시 시작하는 방법이 있습니까?

+0

당신은 [pytest] (https://docs.pytest.org/en/latest/)와 [pytest-qt] (https://pypi.python.org/pypi/pytest- Qt) 플러그인? 나는이 두 가지 중 어느 것도 사용하지 않았지만, 둘 다 성숙하고 유지 관리가 잘된 프로젝트 인 것으로 보인다. [문서] (https://pytest-qt.readthedocs.io/en/latest/)도 적당하다. – ekhumoro

답변

0

귀하의 요구 사항에 따라 ::exec()::exit() 방법을 QApplication으로 사용하십시오.

::exec()을 호출하면 기본 이벤트 루프가 시작됩니다. setUp에 전화하세요.

::exit()을 호출하면 기본 이벤트 루프가 해제됩니다. tearDown에서 전화하세요.

+0

'quit()'이'exit (0)'과 동일하다면 어떻게 도움이 될까요? – ekhumoro

+0

사실 ..... 그는 "exec"를 사용하여 응용 프로그램을 시작할 수 있습니다. 나머지는 가독성을위한 것입니다. – Naidu

+0

안녕하세요,이 시도,'pyqt 해당하는'exec_' 생각하지만 차단 호출입니다. 'setUp'에 넣으면 전체가 얼어 붙습니다. 나는 여기서 무엇을해야할지 모르겠다. 스레드로 시작하는 것이 맞습니까? – Rich