2013-08-07 17 views
0

Qt5를 사용하여 Python (PyQt5)으로 작성된 응용 프로그램이 있습니다.Qt에서 줌 버튼의 기본 동작을 재정의하는 방법

확대/축소의 기본 동작 (왼쪽 상단의 녹색 "+")을 덮어 쓰려고하므로 사용 가능한 모든 공간을 포함하도록 최대화하지 않고 창의 크기를 적절하게 설정합니다.

showMaximize를 재정의하려했으나 해당 메서드가 호출되지 않았습니다. 내 윈도우는 추가 윈도우 플래그가 설정되지 않은 QWidget의 서브 클래스입니다 (예 : 기본값 사용).

어떻게 이벤트를 무시할 수 있습니까? 또는 사용자가 버튼을 클릭하면 레이아웃 시스템 크기를 어떻게 설정할 수 있습니까?

답변

1

가상이 아니기 때문에 showMaximized을 재정의 할 수 없습니다. 이 작업을 재정의 할 방법이 없습니다. 하지만 changeEvent을 무시할 수 있습니다. 사용자가 창을 최대화 할 때 호출됩니다. 일반 창 위치를 재설정하고 크기를 조정할 수 있습니다.

void MyWidget::changeEvent(QEvent *e) { 
    QWidget::changeEvent(e); 
    if (e->type() == QEvent::WindowStateChange) { 
    if (isMaximized()) { 
     showNormal(); 
     resize(200, 200); 
     move(100, 100); 
    } 
    } 
} 
+0

resize 이벤트 내에서 resize를 사용할 때와 같이 무한 루프가 발생하지 않을까요? – Kentzo

+0

아니요'resize'는'isMaximized'에서만 실행되기 때문에'showNormal' 바로 다음에'false'가되므로 사용자가 창을 최대화 할 때 한 번만 실행됩니다. 나는이 코드를 테스트했다. –

+0

어떻게 든이 이벤트를 * 처리하고 처리를 취소 할 수 있습니까? Qt5는 애니메이션을 사용하여 창 크기를 조절합니다. 또한 윈도우의 일부가 화면 밖에있을 때 줌 버튼을 클릭하면 Qt5가 중단 될 때 버그 (?)가 나타납니다. – Kentzo