首页 > 程序开发 > 综合编程 > 其他综合 >

【Qt入门实践】布局器

2016-11-04

布局管理器:QLayout 使用了 多重继承:QObject QLayoutItem,QBoxLayout------------QHBoxLayout QVBoxLayout。

布局管理器

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);		//删除该行
}
相关文章
最新文章
热点推荐