2012-04-20 4 views
1

왼쪽 및 아래 독 영역에 도킹 된 QDockWidgets이있는 QMainWindow가있는 PyQt 4 응용 프로그램이 있습니다. 나는 현재 두 개의 위젯이 왼쪽에 도킹되어 있고 두 개의 위젯이 아래에 있습니다. 저는 프로그래밍 방식으로 중앙 위젯과 도킹 영역 사이의 경계를 프로그래밍 방식으로 이동시켜 도크 영역의 너비 (왼쪽 또는 오른쪽 영역의 경우) 또는 높이 (위쪽 및 아래쪽 도킹 영역의 경우)를 효과적으로 변경하는 방법을 알아 내려고합니다.).QDockWidgetArea의 모든 QDockWidgets의 너비/높이를 어떻게 변경할 수 있습니까?

이 작업은 마우스로 수동으로 수행 할 수 있습니다. 중앙 위젯과 독 영역 사이의 경계 위로 커서를 이동하면 독 영역을 늘리는 데 사용할 수있는 크기 조정 핸들이 생깁니다. 나는 아직 내 프로그램에서 그렇게 할 수있는 인터페이스를 찾지 못했다. 수동으로 QDockWidget 객체의 크기를 수동으로 조정하려고 시도했지만 (작동하지 않아야 함) 작동하지 않는 위젯이 있습니다. 어떤 아이디어?

특히, 접근의이 종류는 작동하지 않습니다

dock1.resize(QSize(width, height)) 
dock2.resize(QSize(width, height)) 
dock3.resize(QSize(width, height)) 

아니다이 수행합니다

dock1.widget().resize(QSize(width, height)) 
dock2.widget().resize(QSize(width, height)) 
dock3.widget().resize(QSize(width, height)) 
+0

이 실패한 시도는 아마 답변의 기회를 향상시킬 것보기. – Kleist

+0

'QDockWidget' 내부의 위젯에서'resize' 대신'setMinimumSize'를 사용하면 어떨까요? 작동합니까? – Avaris

답변

5

내가 무슨 일을 이해 생각한다. 처음에는 문서에서 몇 가지 메모. 먼저 QMainWindow

:

QMainWindow는 가지 QToolBar, QDockWidgets하는 QMenuBar 및 QStatusBar을 추가 할 수있는 자신의 레이아웃을 가지고 있습니다. 레이아웃에는 모든 유형의 위젯이 차지할 수있는 영역이 있습니다.

QMainWindow에는 자체 레이아웃 관리자가 있습니다. 즉, 해당 항목의 레이아웃을 관리합니다. 문서에서 참조를 찾을 수 없지만 레이아웃 관리자가 centralWidget의 영역을 최대화하려고합니다. 따라서 다른 모든 요소는 최소한으로 축소됩니다.

QDockWidget가 setWidget 설정 자식 위젯의 래퍼,()의 역할 :

QDockWidget 볼 수 있습니다. 사용자 정의 크기 힌트, 최소 및 최대 크기 및 크기 정책을 하위 위젯에 구현해야합니다. QDockWidget은 을 존중하며 프레임과 이라는 제목을 포함하도록 자체 제약 조건을 조정합니다. 크기 제한은 도킹 여부에 따라 변경되기 때문에 QDockWidget 자체에서는 설정하지 말아야합니다 ( ). a 도킹 된 QDockWidget에는 프레임이없고 작은 제목 표시 줄이 있습니다.

이렇게하면 QDockWidget 안에있는 위젯의 크기를 변경해야합니다. QDockWidget이 떠 다니면 위젯 요구 사항에 맞게 자유롭게 크기를 조정할 수 있습니다. 그러나 도킹을하면 레이아웃 관리자 QMainWindow에 그대로 남게되어 축소됩니다.

가장 쉬운 해결책은 QDockWidget 안에있는 위젯의 minimumSize을 설정하여 QMainWindow의 레이아웃 관리자가 그 이상으로 축소하지 않도록하는 것입니다. 또는 위젯에 대해 sizeHint 메소드를 하위 클래스로 다시 구현하여 레이아웃 관리자가 원하는 크기를 얻을 수 있도록 할 수 있습니다.

은 즉,이 작업을해야합니다 :

dock1.widget().setMinimumSize(QSize(width, height)) 
dock2.widget().setMinimumSize(QSize(width, height)) 
dock3.widget().setMinimumSize(QSize(width, height)) 
+0

잘 작동합니다. 내 응용 프로그램의 경우 반드시 새로운 크기의 스틱을 영구히 만들 필요는 없습니다. 나는 단지 그 폭/높이로 도크 영역의 크기를 즉시 바꾸고 싶다. 나는'dock {x} .widget(). setMinimumWidth (minWidth)'다음에'dock {x} .widget(). setMinimumWidth (oldMinWidth)'를 사용하여 내가 원하는 효과를 주었다. –

+0

@JasonR : 주 창 크기를 조정할 때마다 'oldMinWidth' (으)로 되돌아갑니다. – Avaris

관련 문제