布局管理器可以讓程式設計師擺脫繁瑣的視窗位置大小設定工作。並且布局管理器可以依據視窗大小變更布局控制項的位置大小。
布局管理器基類為qlayout繼承至qobject 和qlayoutitem,它是乙個抽象基類,需要被進一步繼承才能使用。它的派生類有qhboxlayout、qvboxlayout和qgridlayout。
每個視窗物件都可以設定乙個布局管理器,來管理所有它的子視窗,由於布局管理器繼承至qobject,那麼布局管理的記憶體釋放也可以託管給視窗物件,而所有新增到布局管理器中的視窗物件,它們的記憶體釋放又都託管給這個布局管理器。
通過視窗物件的setlayout來設定布局管理器,如果事先已經設定了乙個布局管理器,那麼會替換掉這個布局管理器。
void
qwidget::setlayout(qlayout
*layout)
你可以簡單的理解布局管理器為視窗的一部分。
qhboxlayout、qvboxlayout它們都繼承至qboxlayout,qboxlayout又繼承至qlayout。
qhboxlayout是水平布局管理器,可以將所有託管給它的視窗物件按照水平方向進行布局。
qvboxlayout是垂直布局管理器,可以將所有託管給它的視窗物件按照垂直方向進行布局。
void
qboxlayout::addwidget(qwidget
*widget, int
stretch
=0, qt::alignment
alignment
=qt::alignment())
/*widget
視窗物件
stretch 伸縮係數
alignment 對齊方式qt::aligment是qt中的乙個列舉型別,具體請檢視幫助文件
*/
void
qboxlayout::setstretch(int
index,int
stretch)
void
qboxlayout::addstretch(int
stretch
=0)
void
qboxlayout::setspacing(int
spacing)
void
qboxlayout::addspacing(int
size);
void
qlayout::setmargin(int
margin)
bool
qlayout::setalignment(qwidget
*w, qt::alignment
alignment)
void
qgridlayout::setrowstretch(int
row,int
stretch)
void
qgridlayout::setcolumnstretch(int
column,int
stretch)
void
qgridlayout::setspacing(int
spacing)
void
qgridlayout::setrowminimumheight(int
row, int
minsize)
void
qgridlayout::setcolumnminimumwidth(int
column, int
minsize)
bool
qlayout::setalignment(qwidget
*w, qt::alignment
alignment)
有些時候,我們需要實現複雜的布局效果,單單使用一種布局管理器,無法完成,那麼這個時候需要巢狀使用布局管理器。即布局管理器中新增布局管理器。
void
qboxlayout::addlayout(qlayout
*layout, int
stretch
=0)
void
qgridlayout::addlayout(qlayout
*layout, int
row, int
column, qt::alignment
alignment
=qt::alignment())
使用布局管理器之後,如果想在建構函式中獲取視窗大小,這個時候就不能使用size函式來獲取,需要通過sizehint函式來獲取。
這是因為,size獲取的是視窗實際大小,一般通過resize來設定,不設定的時候也有預設大小。
然而如果設定了布局管理器,那麼視窗在顯示的時候還會按照特定的布局策略重置視窗大小,而sizehint獲取到的是重置後的視窗大小。函式原型如下:
virtual
qsize
sizehint() const
注意:如果沒有使用布局管理器,那麼sizehint返回的無效的值
深入淺出Mysql(四)
大批量插入資料優化 1 對應myisam型別的表,可以通過以下方式快速的匯入大量資料 alter table tablname disable keys loading the data alter table tablname enable keys 這兩個命令用來開啟或者關閉myisam表非唯一...
Qt深入淺出(二)Qt編譯機制
使用qmake.exe 工具解析.pro檔案,然後生成makefile,通過makefile 32bit.exe解析makefile檔案來編譯,可通過檢視qt creator顯示的編譯資訊。先執行qmake命令解析class1 1.pro檔案,生成makefile.debug檔案 c qt qt5....
Qt深入淺出(二)Qt編譯機制
使用qmake.exe 工具解析.pro檔案,然後生成makefile,通過makefile 32bit.exe解析makefile檔案來編譯,可通過檢視qt creator顯示的編譯資訊。先執行qmake命令解析class1 1.pro檔案,生成makefile.debug檔案 c qt qt5....