【Qt入門實踐】佈局器


佈局管理器



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);		//刪除該行
}




    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章