qt提供了qhboxlayout類(水平排列布局),qvboxlayout類(垂直排列布局),qgridlayout類(網格排列布局)等基本布局管理。它們之間的繼承關係如下圖
布局中常用的方法有addwidget()和addlayout()
addwidget()方法用於加入需要布局的控制項
void addwidget
( qwidget *widget, //需要插入的控制項物件
int fromrow, //插入的行
int fromcolum, //插入的列
int rowspan, //表示占用的行數
int columspan, //表示占用的列數
qt::alignment alignment=0 //描述各個控制項的對齊方式
)
addlayout()方法用於加入子布局
void qgridlayout::addlayout
( qlayout *layout, //表示需要插入的子布局物件
int row, //插入的起始行
int column, //插入的起始列
int rowspan, //表示占用的行數
int columspan. //表示占用的列數
qt::alignment alignment = qt::alignment() //指定對齊方式
)
注意1
leftlayout=new qgridlayout(); //由於leftlayout布局管理器不是主布局管理器,所以不用指定父視窗
qgridlayout *mainlayout=new qgridlayout(this); //mainlayout實現主布局,所有要指定父視窗
注意2qhboxlayout預設採取的是以自左向右的方式順序排列插入控制項或子布局,也可以通過setdirection()方法設定排列的順序,如
toprightlayout->setdirection(qboxlayout::righttoleft);
qvboxlayout預設採取的是以自上而下的方式順序插入控制項和子布局,也可以通過呼叫setdirection()方法設定排列的順序
注意3
qhboxlayout是水平布局,可以設定水平各個控制項之間的間距
toprightlayout=new qhboxlayout();
toprightlayout->setspacing(20); //設定各個控制項之間的間距為20
QLayout動態布局 清空布局
新寫的程式需要動態的改變視窗數量,需要清理原有視窗。在windows下寫好 後放入linux下崩潰。檢視qt文件才發現是寫法不規範的問題。先直接擺最終寫法 qlayoutitem item mainlayout takeat 0 while item 0 item mainlayout takeat...
Qt學習 布局管理器QLayout類
常用的布局管理有qvboxlayout,qhboxlayout,qgridlayout。下面是綜合應用 新建qt gui程式,基類為dialog 標頭檔案 view plain copy to clipboard print?ifndef dialog h define dialog h inclu...
QT刪除QWidget或QLayout下的控制項
最近做了乙個功能,點選按鈕新建控制項,再次點選需要刪除上一次的結果,重新新建控制項,如圖 設定引數,第一次點選分類按鈕 更改引數,第二次點選分類按鈕 試了很多方法都不行,update repaint 均沒有效果,簡單的移除layout也不管用,後來發現問題在於前一次建立的控制項沒有delete,方法...