Qt之手動布局

2021-09-23 14:36:05 字數 1568 閱讀 1712

手動布局,可以實現和水平布局、垂直布局、網格布局等相同的效果,也可實現屬於自己的自定義布局,當窗體縮放時,控制項可以隨之變化。

其對於座標系的建立有嚴格要求,純**思維,使用複雜,不易維護,所以一般不建議使用。

下面我們以簡單的例子來講解如何使用。

水平布局總結

在qt之布局管理器一節中,我們介紹了對於手動布局的實現思路。

通過qwidget::resizeevent()來計算所需要分配的大小,並且給每個子控制項呼叫setgeometry()。

我們先簡單看乙個簡略圖,是乙個乙個垂直布局的介面,包含各個部位的組成以及大小限制。

其中left margin、top margin、right margin、bottom margin分別指各個控制項距離窗體的左、上、右、下外邊距,spacing指控件之間的間距。

標籤和**窗體的寬度均為:width() - nleft - nright,即:窗體寬度 - 左邊距 - 右邊距。

標籤的座標為qpoint(nleft, ntop),即:x為左邊距,y為上邊距。

**窗體的座標為:qpoint(nleft, ntop + nspacing + m_plabel->height()),即:x:左邊距,y:上邊距 + 間距 + 標籤高度。

**窗體的高度為:height() - ntop - 2 nspacing - m_plabel->height() - m_pbutton->height() - nbottom。即:窗體高度 - 上邊距 - 標籤高度 - 按鈕高度 - 下邊距 - 2 間距。

按鈕大小為:qsize(75, 25),即:width:75,height:25。

按鈕位置:qpoint(width() - m_pbutton->width() - nright, height() - nbottom - m_pbutton->height())。即:x:窗體寬度 - 按鈕寬度 - 右邊距,y:窗體高度 - 按鈕高度 - 下邊距。

實現思路不再過多講解,參考垂直布局。

好了,關於網格布局或其他複雜布局就不再一一介紹了,主要計算好各個控制項的相對座標即可。

有人肯定會有疑惑,為什麼不使用setgeometry(10, 10, 100, 75),而必須通過resizeevent()來計算座標呢?

主要區別:

ios之手動記憶體管理

在建立物件的時候,回生成retaincount變數,alloc,new,retain都會使這個值 1,對應的release方法則會使這個值 1。當retaincount 0時系統會呼叫dealloc方法使系統銷毀改物件。所以我們在使用手動記憶體管理時,要注意一下問題 1.原則 記憶體管理原則 配對原...

iOS之手動記憶體管理

objective c採用了一種被稱為引用計數 reference counting 的機制來追蹤物件狀態,每個物件都有乙個與之關聯的整數,被稱為引用計數器。當乙個物件的引用計數為0時,表明程式不再需要該物件,物件會被銷毀。若是物件還持有其他物件的引用,必須重寫dealloc方法,在方法中釋放該物件...

iOS之手動記憶體管理

記憶體管理是每個程式設計師必須要掌握的技能,也是寫好乙個程式,寫乙個好程式的必備技能.下面談一下我對ios開發中的記憶體管理的理解.如果你是乙個比較新的ios程式設計師,那麼恭喜你,你已經很輕鬆了,因為在現在的開發中已經很少去手動管理記憶體了,那麼問題來了,既然不需要去手動管理了那學他還有什麼用呢?...