QT學習筆記 3 布局

2021-10-06 22:23:39 字數 1155 閱讀 7837

moc(meta object compiler,元物件編譯器),先對 qt 源**進行一次預處理。

元物件系統基於三個方面:

1.qobject類:為objects提供了乙個可以利用元物件系統的基類。

2.q_object巨集: 宣告在類的私有部分,該巨集可以啟用元物件特性,例如:動態屬性、訊號與槽。

3.meta-object compiler(moc): 為每個qobject子類提供必要的**來實現元物件特性。

物件樹:qobject 類就有乙個私有變數 qlist,專門儲存這個類的子孫後代們。

使用物件樹模式有什麼好處?:當父物件被析構時子物件也會被析構。

析構函式:析構函式(destructor) 與建構函式相反,當物件結束其生命週期,如物件所在的函式已呼叫完畢時,系統自動執行析構函式。析構函式往往用來做「清理善後」 的工作(例如在建立物件時用new開闢了一片記憶體空間,delete會自動呼叫析構函式後釋放記憶體)。

析構函式的呼叫順序如果出錯,還是會造成比較嚴重的後果的。這種特殊情況在程式設計中很隱蔽,不容易發現。因為編譯的時候不會報錯,只有執行時才會產生問題。所以我們要保持良好的程式設計習慣以及對事物產生順序有科學的認知。

物件樹模式的應用場景:例如,乙個按鈕有乙個qshortcut(快捷鍵)物件作為其子物件。當我們刪除按鈕的時候,這個快捷鍵理應被刪除。這是合理的。

qwidget:是能夠在螢幕上顯示的一切元件的父類。qwidget繼承自qobject,因此也繼承了這種物件樹關係。

qobject物件樹的刪除順序一般是從下往上,逐步刪除,保證沒有qobject會被刪除兩次。

標準 c++ (iso/iec 14882:2003)要求,區域性物件的析構順序應該按照其建立順序的相反過程。

使用 new 建立的物件全部是在堆上面建立的,不使用 new 的都是在棧上建立的。這是標準 c++ 規定的。

有動態建立的物件才應該設定父物件,棧上建立的物件不應該設定父物件。

setparent() 函式會按照預想的方式進行:將物件從原來的父物件中移除。

qt 提供了兩種元件定位機制:絕對定位和布局定位。

QT學習筆記(3)布局管理器

qt有兩種元件的定位方式,絕對定位和布局定位。絕對定位是設定座標和長寬的值,但是改變視窗時元件不會有任何的變化,因此我們需要布局管理器。示例 include mainwindow.h include include include 水平方向布局 include 豎直方向布局 將元件放入某一種布局,調...

QT筆記 布局

1 qt中使用布局器qlayout布局 2自動計算各個空間的大小和位置 採用的既定policy策略來調整子視窗的大小和位置 3qhboxlayout橫向布局 qvboxlayout縱向布局 使用三部曲 1 建立控制項物件 2 建立布局器 3 使用布局器 mywin.h 1 ifndef mywin ...

Qt學習筆記 視窗的布局

布局 layout,就是把各個控制項放在合適的位置,佔據適當大小的空間。在qt中,使用布局器qlayout進行布局 1 它為我們自動計算各個控制項的大小和位置 2 當父視窗調整時,它根據既定策略policy來調整各個子視窗的大小和位置。兩個常用的qlayout子類 qhboxlayout 橫向布局 ...