2012-04-14 244 views
1

我有一個QGridLayout,它有六行中的一些小部件。行1,3和5包含打開文件選擇對話框的QLabelQLineEditQPushButton。行2,4和6包含用於向用戶呈現驗證錯誤的QLabel。錯誤隱藏在下面的圖片中。如何防止QGridLayout中的小部件重疊?

當窗口能夠佔用儘可能多的空間時,它不會出現此問題。但是,當我限制窗口的大小可言,在此列表中的元素,看起來就像這樣:

QGridLayout with vertically restricted elements

所以我的問題是,我該如何確保在QGridLayout所有qwidgets可以儘可能多的佔用他們需要什麼空間?

編輯: 繼@Avaris'的建議,我打過電話setMinimumSize()QGridLayout(共6行)每個插件,以及可見的元素看起來好多了(感謝,@Avaris!)。但是現在,當我導致驗證錯誤時,錯誤本身(紅色QLabel)放置在其他小部件上。我可以強制QGridLayout不重疊嗎?

下面是它看起來像現在: enter image description here

+1

您是否將這些小部件的最小尺寸設置爲小? – Avaris 2012-04-14 17:22:33

+0

@Avaris,我嘗試了你的建議,它適用於可見的元素。然而,其他行(包含隱藏的'QLabel')現在顯示在其他元素的頂部。我可以強迫他們都排隊嗎?謝謝! – James 2012-04-14 19:17:12

+0

我並不是建議你設置最小尺寸:)。我問你以前是否設置過任何東西。如果你沒有爲你的小部件設置任何大小,他們不應該那麼小。你可以發佈一些代碼嗎? – Avaris 2012-04-14 20:57:30

回答

0

雖然解決摸索,我發現something in the TrollTech archives一個支持@阿瓦里斯的有關設置部件的最小尺寸的想法。該帖子建議爲QGridLayout中的每個小部件設置最小大小。

我的實現看起來是這樣的,因爲我遍歷所有的元素被添加到我的QGridLayout:

widget = QtGui.QWidget() 
hint = widget.sizeHint() 
if hint.isValid(): 
    widget.setMinimumSize(hint) 

暗示的有效性所使用的佈局有所不同,但部件sizehints似乎總是有效的,當我使用QGridLayout。

+0

嗯。鏈接已經死了,你碰巧記得它是關於什麼的? – vines 2016-04-07 15:21:36

+0

啊,很抱歉,我不記得細節!由於大多數TrollTech檔案的代碼樣本均採用C++,因此我懷疑它與上面提供的Python代碼示例非常相似。 – James 2016-04-22 22:57:18