布局: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...