Qt學習筆記 視窗的布局

2021-08-08 18:21:18 字數 1825 閱讀 7438

布局:layout,就是把各個控制項放在合適的位置,佔據適當大小的空間。

在qt中,使用布局器qlayout進行布局

(1)它為我們自動計算各個控制項的大小和位置

(2)當父視窗調整時,它根據既定策略policy來調整各個子視窗的大小和位置。

兩個常用的qlayout子類: qhboxlayout:橫向布局、 qvboxlayout:縱向布局

縱向布局 qvboxlayout:每個box的寬度資訊被忽略,只關心他的高度。

例:private:

qlineedit * m_lineedit;

qplaintextedit * m_textedit;

在視窗建構函式中寫:

//建立控制項物件

m_lineedit = new qlineedit(this);

m_textedit = new qplaintextedit(this);

//建立布局器 

qvboxlayout * layout = new qvboxlayout(this);

layout->addwidget(m_lineedit);

layout->addwidget(m_textedit);

//使用布局器

this->setlayout(layout);

sizepolicy:用於描述乙個widget被resizing(調整大小)的時候,採用的策略

在sizepolicy類中定義了七種策略

fixed:使用sizehint,不能更大、不能更小

minimum:不得小於sizehint,可以更大,但不需要更大

maximum:不得大於sizehint,可以更小

preferred:優先使用sizehint,可大可小

expanding:使用sizehint,越大越好

minimumexpanding:不得小於sizehint,越大越好

lgnored:忽略sizehint,越大越好

得到sizehint和sizepolicy

由於採用縱向布局,我們只關心其高度和縱向的policy

qsize sizehint = m_lineedit->sizehint();

qsizepolicy pl = m_lineedit->sizepolicy();

qsizepolicy::policy vertical = pl.verticalpolicy();

改qlineedit的policy,

m_lineedit->setsizepolicy(qsizepolicy::fixed,qsizepolicy::expanding);

qwidget類有乙個函式 virtual qsize sizehind() const;

每一種widget視窗類都需要重寫這個函式。  作用:向布局器宣告自己需要空間大小。

注:sizehint和sizepolicy,都是提供給布局器的資訊,布局器qlayout會根據這兩個資訊來決定這個視窗控制項的實際尺寸。

布局引數

size hint:推薦大小

size policy:策略

stretch factor:拉伸因子

在同乙個方向上,兩個控制項都有拉伸的需求(expanding),那麼布局器就需要合理分配他的需求

比如:a,b控制項都是expanding,stretch為1,1那麼多餘空間分配比例將是1:1

maximum size / minimum size:上限與下限

首先,qlayout根據控制項的size hint,size policy,stretch factor來計算出大小

最後,保證其大小在[minimum,maximum]之間(多了一重限制)

QT入門筆記 視窗部件的布局

執行結果 解析 上面的程式都比較簡單。void setwindowtitle const qstring 設定視窗標題 qspinbox the qspinbox class provides a spin box widget.上圖左邊即為qspinbox qslider the qslider ...

QT學習筆記 3 布局

moc meta object compiler,元物件編譯器 先對 qt 源 進行一次預處理。元物件系統基於三個方面 1.qobject類 為objects提供了乙個可以利用元物件系統的基類。2.q object巨集 宣告在類的私有部分,該巨集可以啟用元物件特性,例如 動態屬性 訊號與槽。3.me...

QT學習筆記 視窗的相互切換

1.ui檔案中布局 2.主要程式 main.cpp int main int argc,char argv mainwindow.cpp include mainwindow.h include ui mainwindow.h mainwindow mainwindow qwidget parent...