我有Qt的各種大小問題。我正在創建我自己的小部件並使用不同的佈局(通常,我需要我自己的才能使它們正常工作,而無需在「強大的」默認佈局上花費數小時......這不會按預期佈置事物。)什麼使Qt小部件及其佈局的行爲正確(關於它的大小)?
一旦我完成了一個小部件和它的佈局,但它並不正確。除非我呼叫widget->resize(1, 1);
,這會最終強制「調整大小」並使小部件看起來正確(即重新計算幾何圖形),否則大小永遠無法正確設置。即使updateGeometry()
調用也不起作用。
這是一個可怕的問題,當需要在父窗口小部件(yuck!)上調用resize()
時,並且我正在閱讀的內容應該沒有必要,因爲佈局是正確編程的。
是否有一個樣本可以工作,並且不是幾千行的長度,或者Qt是否需要幾千行來完成任何工作,即使是最簡單的小部件?
什麼是最小功能被調用來使一個小部件&它的佈局一次工作?
謝謝。 Alexis
P.S.我試圖執行sizeHint()
,minimumSize()
,maximumSize()
,我失蹤的其他人?我希望這足夠。很顯然,我還在佈局上實施了setGeometry()
以適當調整孩子的大小。
---另外1
有一個帶佈局,清楚地不能作爲是Qt中的樣本圖像。不同按鍵的位置,功能和顏色是由XML驅動的,適用於世界上任何鍵盤。
(注意,這個樣本沒有顯示兩行,比上寬下窄下面顯示的回車鍵,或多或少,是不可行的所有常規佈局;當然,它我的版本的作品。)
---澄清
我也不太清楚如何更好地說明問題。我正在考慮編寫一個測試小部件,看看如何重現問題,然後發佈並最終解決問題。 8-)
內部Qt佈局使用的默認佈局函數需要大量編碼。我想避免複製/粘貼所有這些,因爲對於維護而言,這使得它幾乎不可能。
---今天的調查結果
因爲我需要來調整窗口小部件之一,我決定增加一個VBoxLayout
,並使其發揮作用。
我確實發現了問題...我樹中的一個小部件是QScrollArea
,並且sizeHint()
返回(-1,-1)。不完全是我所期望的,但是......無論你放在那個小部件裏面,你都知道如何計算它的寬度和高度,否則......它會失敗。
仔細查看代碼,我實際上可以通過使用找到的最寬寬度來計算寬度。一旦我使用了它,這個小部件就會出現(並且它實際上會隨着列表中的東西的變化而自動調整大小,0127)。從根到樹中葉子的父母,所有這些小部件都需要有效的佈局。一旦我在頂部的小部件中添加了一個,它就可以正確調整自己和孩子的身高(好吧...在我的情況下,達到QScrollArea
,其餘部分需要從底部到頂部調整大小。)
---啊!哈! (或:你發現讀取實現代碼的內容!)
今天我碰到了另一個只需要正確調用的問題......我在文檔中找不到任何值得的東西。
所有對象現在都有一個佈局,但是某個父級不會正確調整大小。平原簡單。
我有如下父通話:
// changes to the children are changing the geometry
parentWidget()->updateGeometry();
呀。文檔說這就是你必須做的。那個電話根本沒有任何反應。不知道它應該做什麼,我沒有看到這個功能。無論如何,它從未爲我做過任何事情。
所以......我查看了佈局,試圖瞭解它將如何向上/向下發送信息。我沒有看到太多,除了一個有趣的評論:
// will trigger resize
這是說,SetFixedSize
模式。要達到該功能,您需要製作更新佈局。啊!是的...佈局,而不是父窗口小部件...讓我們來嘗試,而不是:
parentWidget()->layout()->update();
瞧!它在所有情況下正確調整大小。很不可思議的是,小工具updateGeometry()
不會觸發相同的效果...
它是什麼,你要完成內置版圖系統不能爲你做什麼?當它基本上歸結爲「我如何使事情發揮作用?」時,很難回答一個對你有用的問題。 – Chris
對於圖形用戶界面/佈局排隊,包括帶註釋的屏幕截圖可以提供很多幫助。有沒有人在這裏,喜歡當他們有可靠的信息時想出來的東西:) –
如果你沒有問題你的代碼,那麼你可以在www.ideone.com上分享:D – blueskin