佈局管理器
QLayout 使用了 多重繼承:QObject QLayoutItem
QBoxLayout------------QHBoxLayout QVBoxLayout
QFormLayout
QGridLayout
QStackedLayout
1 佈局管理系統
1.1 佈局管理器
自動生成佈局
例子:使用 頂層佈局管理器
在圖形界面上,添加 字體選擇框、文本框
點擊 垂直佈局 或 橫向佈局
1 QBoxLayout
屬性:左邊距
間隔
伸縮因子
設置大小約束條件
使用代碼生成佈局
例子:
在界面上 打破布局----有 工具按鈕
修改 構造函數:
Layout01Widget::Layout01Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Layout01Widget)
{
ui->setupUi(this);
QVBoxLayout *layOut=new QVBoxLayout(this); //創建佈局器
layOut->addWidget(ui->fontComboBox); //給佈局器裏 增加 部件
layOut->addWidget(ui->textEdit);
layOut->setSpacing(20); //設置 部件間隔
layOut->setContentsMargins(30,30,30,30); //設置 邊界距
setLayout(layOut); //當前窗口 設置該佈局器
}
//注意:insertWidget()函數,可以在 指定位置 增加部件
2 QGridLayout
//代碼:
Layout01Widget::Layout01Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Layout01Widget)
{
ui->setupUi(this);
QGridLayout *layOut=new QGridLayout(this); //建立 柵格佈局器
layOut->addWidget(ui->fontComboBox,0,0,1,2); //給佈局器 增加部件----在0行 0列 佔1行 2列
layOut->addWidget(ui->pushButton,0,2,1,1);
layOut->addWidget(ui->textEdit,1,0,1,3);
layOut->setSpacing(20);
layOut->setContentsMargins(30,30,30,30);
setLayout(layOut);
}
3 QFormLayout
方法1:----在界面上 自動添加 表單佈局將Form Layout拖住到 界面
點右鍵----選擇----添加窗體佈局行
注意:標籤名----寫爲 如: 姓名(&N)
即 增加了快捷鍵
方法2:----手動編寫代碼
使用 addRow()函數
4 綜合使用 佈局管理器
同時選上 字體選擇框、按鈕---- 點右鍵----佈局----水平佈局
在不同的 佈局部件將 增加間隔:
方法:拖拽進1個 垂直分隔符----Vertical Spacer(類爲Spacer) 可以修改 高度
在主界面----點擊 垂直佈局
知識點:
將 子佈局器 放入 父佈局器 的方法:----調用 父佈局器的 addLayout()函數
設置 部件大小
sizeHint 建議的 大小提示
minimumSizeHint 建議的 最小 大小提示
sizeHint()函數 可以返回
minimumSizeHint()函數
sizePolicy 大小 策略
例子:看 Vertical Spacer 的屬性
sizeType 原爲 Expanding
設置 sizeHint的高度爲 100時,實際可能並沒有 達到100
將 sizeType 改爲 Fixed,則實際就可以改到100
原因:大小策略 的問題
layoutStretch屬性:----設置佈局 長度比例
在界面上----點擊1個橫向佈局器--------選layoutStretch屬性----將0,0修改爲2,1(則,2個佈局的長度比例 就變爲了 2:1)
注意:
addWidget()函數中,第2個參數----就是填寫 伸縮因子
讓表單佈局器 中的 部件----大小更美觀:
選擇該 表單佈局器----layoutFieldGrowthPolicy屬性----修改爲ExpandingFieldsGrow
讓表單佈局器 中的 多個Label部件,右對齊
選擇該 表單佈局器----layoutLabelAlignment屬性----修改爲AlignRight
可擴展窗口
完全利用的 佈局器的 特性
1 分裂器
例子:
在界面上 放4個Button,全選----點右鍵----佈局----使用分裂器水平佈局
特點:按鈕 垂直方向 也會 拉伸
2 設置夥伴----爲了使用 快捷鍵
例子:
方法1:----自動,使用圖形界面
增加4個 Label
增加4個 Button 多選框 行編輯器 微控框
修改4個Label的 文本,如: &Button 或 登錄(&B)
單擊 工具按鈕----編輯夥伴
方法1=2:---手動在代碼中
使用QLabel的setBuddy()函數
3 設置Tab鍵 順序
單擊 工具按鈕----編輯Tab順序
////////////////////////////////////////////
TableWidget的用法
案例:--- 點擊 添加按鈕,可以將 學號 姓名 性別 ,顯示在 TableWidget組件裏;並且可以反覆增加
步驟:
1、在界面上增加下列組件
LineEdit 學號
LineEdit 姓名
ComboBox 性別
TableWidget 表格
//在cpp的構造函數中,給ComboBox增加 男 女;設置 表格的表頭、列數
//代碼:
#include "tablewidget01widget.h"
#include "ui_tablewidget01widget.h"
TableWidget01Widget::TableWidget01Widget(QWidget *parent)
: QWidget(parent), ui(new Ui::TableWidget01Widget)
{
ui->setupUi(this);
ui->comboBoxSex->addItem("男");
ui->comboBoxSex->addItem("女");
//ui->tableWidget->setRowCount(2);
ui->tableWidget->setColumnCount(3);
QTableWidgetItem *number=new QTableWidgetItem("number");
QTableWidgetItem *name=new QTableWidgetItem("name");
QTableWidgetItem *sex=new QTableWidgetItem("sex");
ui->tableWidget->setHorizontalHeaderItem(0,number);
ui->tableWidget->setHorizontalHeaderItem(1,name);
ui->tableWidget->setHorizontalHeaderItem(2,sex);
/*QLabel *labelNumber=new QLabel("1001");
QLabel *labelName=new QLabel("zhangsan");
QComboBox *comboBoxSex=new QComboBox;
comboBoxSex->addItem("man");
comboBoxSex->addItem("woman");
ui->tableWidget->setCellWidget(0,0,labelNumber);
ui->tableWidget->setCellWidget(0,1,labelName);
ui->tableWidget->setCellWidget(0,2,comboBoxSex);
ui->tableWidget->resizeColumnsToContents();
ui->tableWidget->resizeRowsToContents();*/
//ui->tableWidget->show();
}
//單擊 添加按鈕,觸發函數,可以將學生信息寫到表格裏
//代碼:
//cpp中的函數----本例只寫了學號,其它的請學生自己完成
void TableWidget01Widget::on_pushButtonAppend_clicked()
{
int count=ui->tableWidget->rowCount(); //取得表格原有的 行數
ui->tableWidget->setRowCount(count+1); //因爲要添加新行,所以重新設置表格的總函數
QTableWidgetItem *itemNumber=new QTableWidgetItem(ui->lineEditNumber->text());
ui->tableWidget->setItem(count,0,itemNumber); //將學號寫到了合適的行裏
return;
}
案例:-----單擊 刪除按鈕,觸發函數,可以將TableWidget中的 已選的行,刪除
步驟:
//1、在cpp構造函數中,修改TableWidget的選擇方式爲 選行-----默認爲 選項目
//增加的語句爲:
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
//2、刪除的函數爲
void TableWidget01Widget::on_pushButtonDelete_clicked()
{
if(!ui->tableWidget->isItemSelected(ui->tableWidget->currentItem())) //如果沒有選任何行 也不能刪除
return;
int row=ui->tableWidget->currentRow(); //獲取當前的 行號
if(row<0) //保護措施,行號小於0,說明沒有行數據,就不要刪了,否則程序會崩潰
return;
ui->tableWidget->removeRow(row); //刪除該行
}