본문 바로가기
SWE/Qt

[Qt] 외부에서 widget을 resize할 때 내부 layout도 resize되는 방법

by S나라라2 2020. 9. 1.
반응형

QSize()

: 윈도우 프레임을 제외한 위젯의 사이즈를 가지고 있음.

 

만약 위젯이 visible상태에서 resize된다면, 이것은 resizeEvent()를 즉시 전달받는다. 

만약 위젯이 not visible상태라면, visible이 되기 전에 이벤트를 받는 것을 보장한다.

 

qsize는 minimumSize(), maximumSize()에 의해서 범위가 지정될 수 있다.

기본값은 사용자의 플랫폼과 화면의 geometry값에 따라 결정된다.

 

주의사항 : resizeEvent()안에서 resize()나 setGeometry()를 호출하면 무한루프에 빠질 수 있다.

 

추가 : QSize(0,0)으로 위젯을 설정하면 위젯이 스크린에서 안보여질 수 있다.

 

 

 

qtcentre 질의

 

제목 : resize widget이 resize layout 도 강제 실행시키기

 

다이얼로그가 있다. 그 다이얼로그에 위젯과 확인, 취소 버튼들이 있다.

위젯들은 vertical layout안에 있다.

 

위젯이 resize될 때 다이얼로그도 자동적으로 resize되도록 하고싶다.

위젯은 이미지를 보여줘야하고 나는 이 위젯을 적절한 사이즈로 resize하고 싶다.

 

이게 가능할까? 또는 내가 시시때때로 dialog의 사이즈를 수동으로 바꿔야할까?

 

 

답변 1.

resizeEvent 함수를 implement하고 모든 연관된 값 변화를 그곳에서 처리해라.

 

=> 나의 실험결과

외부에서 setFixedSize를 해주었을 때 resizeEvent를 타지 않는다. 

 

 

답변 2.

너는 dialog를 non-resizable하게 만들 수 있다.

dialog->layout()->setSizeConstraint(QLayout::SetFixedSize); // make the layout follow size hint

그리고 이것은 내부의 sizehint를 따를 것이다. 내부 content widget을 위해 단지 sizehint만 implement해주면 된다. 그리고 sizehint가 변할 때마다 updateGeometry()를 호출해라. 

 

 

출처 : www.qtcentre.org/threads/18657-Resize-widget-force-layout-resizing

 

반응형