공부블로그
pyqt5연습_6 본문
21/05/09
2강 참조 - youtu.be/3k2QPRoJqoI
배운점
1. QMessageBox클래스 (참고- doc.qt.io/qt-5/qmessagebox.html#QMessageBox-1 ) 오역주의ㅜㅜ
사용자에게 정보를 알리거나 질문에 대한 답변을 받는 모달 대화 상자를 제공하는 클래스
위치는 pyqt5.QtWidgets모듈에 존재
사용법:
속성 기반 api를 사용하는 방법과 정적 함수를 사용하는 방법이 존재. 정적 메소드가 더 간단하지만 속성 기반 api가 더 유연하고 다양한 결과를 낼 수 있다.
위 코드에서는 정적메서드 종류 중 다음을 사용
information(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)
>>정적메소드니까 클래스명. 정적메소드( ) 형식으로 사용
QMessageBox.아이콘 종류(self, 타이틀바에 나타날 문자열, 대화창에 나타날 문자열, 버튼 종류, 디폴트로 선택될 버튼)
이 메서드의 반환값은 Yes나 No같은 상수가 반환된다.
- 속성 기반 API
QMessageBox 인스턴스를 생성하고 속성 설정. 속성의 종류는 텍스트, 아이콘 등이 있음
메세지를 모달 대화상자로 표시하고 사용자가 닫을 때까지 해당 Qt프로그램의 다른 창과 상호작용할 수 없도록하는 exec()를 사용한다.
*exec() 가상 슬롯을 오버라이딩하는 것.
표준 버튼을 사용시 StandardButton값을 반환한다. 사용한다(Ok확인버튼, Open 열기 버튼, Save 저장버튼 등 에 정의된 ButtonRole == 신호)
사용자가 정의한 버튼과 같이 사용할 때는 불투명한 값을 반환. clickedButton()어떤 버튼이 클릭되었는지 알기 위해 사용자가 누른 버튼을 반환하는 clickedButton()을 사용해야한다..?
2. 이벤트 발생 처리 (보충 이해 잘 못함ㅜ)
QEvent클래스= 모든 이벤트 클래스의 기본 클래스 위 코드에서 배웠던 QCloseEvent클래스와 QtWidget클래스와 상속 관계이다.
원리) Qt의 메인 이벤트 루프가 이벤트 큐에서 네이티브 윈도우 시스템 이벤트를 가져와서 QEvent로 변환하고 번역된 이벤트를 QObject로 보낸다. (이벤트 핸들러?)QObject는 event()를 호출해서 이벤트를 받는다. 이벤트에 대한 처리를 사용자가 정의하기 위해서 하위클래스에서 재정의할 수 있다. 대표적인 예로 QWidget클래스의 event() << 이게 메인 이벤트 핸들러
QWidget클래스의 closeEvent(QCloseEvent * event)
이 이벤트 핸들러는 Qt프로그램이 윈도우 시스템으로부터 최상위 위젯에 대한 윈도우 닫기 요청이 들어왔을 경우 이벤트와 함께 호출된다. 이벤트르 수락할 경우 accept(), 거부할 경우 ignore()를 호출하여 창이 닫히거나 닫히지 않도록 할 수 있다.
매개변수로 QCloseEvent()클래스의 객체를 보낸다
QCloseEvent클래스랑 무슨 관계인지 모름ㅠ
최상위위젯을 x버튼을 눌러서 종료하게 되면 QCloseEvent가 생성되어 닫으려는 이벤트가 위젯에 전달된다. 닫기 이벤트는 수진자가 위젯을 닫을 것인지 아닌지의 플래그가 포함되어 있다.