2012-09-10 145 views
4

我寫了Qt的程序是這樣的:Qt的:QWidget的大小

screen capture

主窗口是一類Window : QWidget我已經定義了。它有一個QGridLayout,它基本上有1行和3列。正如你所看到的,第一列包含一個菜單(這是一個類Menu :QWidget),第二和第三列各包含一個畫布(我也定義了一個類Canvas : QWidget)。

我很難找出尺寸是如何工作的。到目前爲止,我已經爲第一列的寬度(在我的窗口的佈局中)定義了一個最小尺寸來修復菜單的寬度,並且我在其構造函數中爲Canvas設置了一個固定尺寸(如:setFixedSize(QSize(size_in_pixels, size_in_pixels));)。

問題是,當用戶重新調整窗口的大小時,這種行爲會非常糟糕。我想我想要做的是將我的畫布的sizeHint設置爲size_in_pixels(我的首選尺寸),但這似乎很難。我也希望我的畫布在任何時候都有相同的高度和寬度。我一直在閱讀Qt文檔並嘗試了幾件事,但我無法想出一個解決方案。

根據你的要走的路是什麼?非常感謝您的見解。

+0

我提交了一個答案......但作爲@karlphillip建議,請請請接受一些你以前的答案。 – jdi

+0

請注意!我是這個網站的新手。 jdi,非常感謝你的回答。我會告訴你它是如何在一瞬間完成的。 – Seub

回答

9

您可以將畫布小部件設置爲Expanding大小策略。隨着佈局規模的擴大,他們將同樣消耗剩餘的空間。

下面是一個例子,寫在PyQt4的

widget = QtGui.QWidget() 
widget.resize(800,600) 
layout = QtGui.QGridLayout(widget) 

label = QtGui.QLabel("Menu") 
label.setFrameStyle(label.Box) 
label.setMinimumWidth(100) 
layout.addWidget(label, 0, 0) 

label = QtGui.QLabel("Canvas 1") 
label.setFrameStyle(label.Box) 
policy = QtGui.QSizePolicy(
    QtGui.QSizePolicy.Expanding, 
    QtGui.QSizePolicy.Expanding) 
label.setSizePolicy(policy) 
layout.addWidget(label, 0, 1) 

label = QtGui.QLabel("Canvas 2") 
label.setFrameStyle(label.Box) 
layout.addWidget(label, 0, 2) 
policy = QtGui.QSizePolicy(
    QtGui.QSizePolicy.Expanding, 
    QtGui.QSizePolicy.Expanding) 
label.setSizePolicy(policy) 

small

larger

+0

這很好,看起來我可以用這個工作。非常感謝! – Seub