当前位置: 首页 > article >正文

QT之LayOut布局

文章目录

  • QFormLayout
  • QGridLayout
  • QFormLayout、QGridLayout、QHBoxLayout、QVBoxLayout综合案例
    • 用QFormLayout 代替 界面左边部分的QGridLayout

QFormLayout

#include "widget.h"#include <QFormLayout>
#include <QLineEdit>Widget::Widget(QWidget *parent): QWidget(parent)
{//固定窗口大小setFixedSize(250,200);// 创建表单布局指针QFormLayout *qLayout=new QFormLayout(this);QLineEdit *le1=new QLineEdit(); // 输入学号QLineEdit *le2=new QLineEdit(); // 输入姓名QLineEdit *le3=new QLineEdit(); // 输入学校qLayout->addRow("学号",le1);qLayout->addRow("姓名",le2);qLayout->addRow("学校",le3);qLayout->setSpacing(10);// WrapAllRows将标签显示在单行编辑框上面//qLayout->setRowWrapPolicy(QFormLayout::WrapAllRows);// 当标签和单选编辑框,将标签显示在同一行。qLayout->setRowWrapPolicy(QFormLayout::WrapLongRows);qLayout->setLabelAlignment(Qt::AlignLeft); // 设置标签对齐方式setWindowTitle("表单布局测试案例");}

qLayout->setRowWrapPolicy(QFormLayout::WrapLongRows);效果
在这里插入图片描述
qLayout->setRowWrapPolicy(QFormLayout::WrapAllRows);效果
在这里插入图片描述

QGridLayout

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent)
{button1=new QPushButton(this);button1->setText("第一区:顶部菜单栏选项");//button1->setFixedHeight(60); // 设置固定大小高度//把QPushButton控件的大小策略设定为在水平和垂直方向上都能自动扩展。//当窗口大小发生改变时,按钮能够依据布局的变化自动调整自身大小button1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);button2=new QPushButton(this);button2->setText("第二区:侧边栏选项");//button2->setFixedWidth(150); // 设置固定大小宽度button2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);button3=new QPushButton(this);button3->setText("第三区:底部选项");//button3->setFixedHeight(60);button3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);button4=new QPushButton(this);button4->setText("第四区:子窗体选项");//button4->setFixedHeight(60);button4->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//网格布局类pGrid_layouts=new QGridLayout();// 通过此函数设置左侧 顶部 右侧 底部边距,主要方便布局周围进行使用pGrid_layouts->setContentsMargins(0,0,0,0);// 用于设置布局四周的边距// pGrid_layouts->setMargin(30);//5.12开始被弃用pGrid_layouts->setContentsMargins(10,10,10,10);//设置QGridLayout中各个控件之间间距pGrid_layouts->setSpacing(0);// 显示位置// addWidget(参数1,参数2,参数3,参数4,参数5,参数6)/*1:我要插入的子布局对象2:插入的开始行3:插入的开始列4:占用的行数5:占用的列数6:指定对齐方式*/pGrid_layouts->addWidget(button1,0,1);pGrid_layouts->addWidget(button2,0,0,3,1);pGrid_layouts->addWidget(button3,2,1);pGrid_layouts->addWidget(button4,1,1);//给部件设置布局setLayout(pGrid_layouts);}

在这里插入图片描述
第一区:第0行、第1列
第二区:第0行、第0列、占用3行,1列
第三区:第1行、第1列
第四区:第2行、第1列

QFormLayout、QGridLayout、QHBoxLayout、QVBoxLayout综合案例

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QTextEdit>
#include <QGridLayout>
#include <QPushButton>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();private:// 1:左边 网格布局、表格布局QGridLayout *lLayout;QLabel *UserNumber;QLineEdit *UserNumberLineEdit;QLabel *UserName;QLineEdit *UserNameLineEdit;QLabel *UserSex;QComboBox *UserSexCombobox;QLabel *UserDepart;QTextEdit *UserDepartTextEdit;QLabel *UserAge;QLineEdit *UserAgeLineEdit;// 2:右边 水平布局QHBoxLayout *toprightlayout;QVBoxLayout *rightlayout;QLabel *MyselfInfo;QTextEdit *MyselfInfoTextEdit;// 3:右边底部QPushButton *okbutton,*cancelbutton;QHBoxLayout *buttomLayout;
};
#include "dialog.h"
#include <QFormLayout>Dialog::Dialog(QWidget *parent): QDialog(parent)
{setWindowTitle("员工信息");// 左边控件UserNumber=new QLabel("员工编号:");UserNumberLineEdit=new QLineEdit;UserName=new QLabel("员工姓名:");UserNameLineEdit=new QLineEdit;UserSex=new QLabel("员工性别:");UserSexCombobox=new QComboBox;UserSexCombobox->addItem("男");UserSexCombobox->addItem("女");UserDepart=new QLabel("所在部门:");UserDepartTextEdit=new QTextEdit;UserAge=new QLabel("员工年龄:");UserAgeLineEdit=new QLineEdit;// 网格布局lLayout=new QGridLayout();// addWidget(参数1,参数2,参数3,参数4,参数5,参数6)/*1:我要插入的子布局对象2:插入的开始行3:插入的开始列4:占用的行数5:占用的列数6:指定对齐方式*/lLayout->addWidget(UserNumber,0,0); // 员工编号lLayout->addWidget(UserNumberLineEdit,0,1);lLayout->addWidget(UserName,1,0);lLayout->addWidget(UserNameLineEdit,1,1);lLayout->addWidget(UserSex,2,0);lLayout->addWidget(UserSexCombobox,2,1);lLayout->addWidget(UserDepart,3,0);lLayout->addWidget(UserDepartTextEdit,3,1);lLayout->addWidget(UserAge,4,0);lLayout->addWidget(UserAgeLineEdit,4,1);//设置网格布局(QGridLayout)列拉伸系数的方法//有两列,拉伸系数分别为 1 和 3,那么第二列将获得比第一列多两倍的额外空间。lLayout->setColumnStretch(0,1);lLayout->setColumnStretch(1,3);// 右边上部分//右边为垂直布局里个人简历为垂直布局,其他信息为水平布局toprightlayout=new QHBoxLayout();toprightlayout->setSpacing(5);MyselfInfo=new QLabel("个人简历:");MyselfInfoTextEdit=new QTextEdit;QLabel* MyselfInfo1=new QLabel("其他信息:");QTextEdit* MyselfInfoTextEdit1=new QTextEdit;//个人简历加到垂直布局toprightlayout->addWidget(MyselfInfo1);toprightlayout->addWidget(MyselfInfoTextEdit1);rightlayout=new QVBoxLayout();//把水平布局放进主界面右边的垂直布局rightlayout->addWidget(MyselfInfo);//把其他信息放进水平布局rightlayout->addWidget(MyselfInfoTextEdit);rightlayout->addLayout(toprightlayout);// 右边下部分okbutton=new QPushButton("确认");cancelbutton=new QPushButton("退出");buttomLayout=new QHBoxLayout();buttomLayout->addStretch();buttomLayout->addWidget(okbutton);buttomLayout->addWidget(cancelbutton);QGridLayout *mlayout=new QGridLayout(this);//隐式设置Dialog的布局为mlayoutmlayout->setMargin(20);mlayout->setSpacing(10);mlayout->addLayout(lLayout,0,0); // 左边//mlayout->addLayout(qLayout,0,0);mlayout->addLayout(rightlayout,0,1); // 右上mlayout->addLayout(buttomLayout,1,0,1,2);//窗口会根据布局里内容的尺寸来自动调整初始大小,并且用户无法对窗口大小进行更改mlayout->setSizeConstraint(QLayout::SetFixedSize);//new QGridLayout(this);这里不隐式设定布局就要显示设置setLayout(mlayout);//不然界面无法显示//setLayout(mlayout);}

用QFormLayout 代替 界面左边部分的QGridLayout

#include "dialog.h"
#include <QFormLayout>Dialog::Dialog(QWidget *parent): QDialog(parent)
{setWindowTitle("员工信息");/*****QFormLayout *qLayout=new QFormLayout(this);// 隐式设置Dialog的布局为qLayout错误这里如果传了this就会把qLayout设置为定成布局,就只会显示qLayout的界面*****///Qt规则​​:当通过 new QLayout(widget) 创建布局时,会自动调用 widget->setLayout()//​​后果​​:Dialog 的布局被先后设置为 qLayout 和 mlayout,违反 ​​单顶级布局原则​QFormLayout *qLayout=new QFormLayout();QLineEdit *le1=new QLineEdit(); // 员工编号:QComboBox *le2=new QComboBox(); // 员工姓名:le2->addItem("男");le2->addItem("女");QLineEdit *le3=new QLineEdit(); // 员工性别:QTextEdit *le4=new QTextEdit(); // 所在部门:QLineEdit *le5=new QLineEdit(); // 员工年龄:qLayout->addRow("员工编号:",le1);qLayout->addRow("员工姓名:",le2);qLayout->addRow("员工性别:",le3);qLayout->addRow("所在部门:",le4);qLayout->addRow("员工年龄:",le5);qLayout->setSpacing(10);qLayout->setRowWrapPolicy(QFormLayout::WrapLongRows);qLayout->setLabelAlignment(Qt::AlignLeft); // 设置标签对齐方式// 右边上部分toprightlayout=new QHBoxLayout();toprightlayout->setSpacing(5);MyselfInfo=new QLabel("个人简历:");MyselfInfoTextEdit=new QTextEdit;QLabel* MyselfInfo1=new QLabel("其他信息:");QTextEdit* MyselfInfoTextEdit1=new QTextEdit;toprightlayout->addWidget(MyselfInfo1);toprightlayout->addWidget(MyselfInfoTextEdit1);rightlayout=new QVBoxLayout();rightlayout->addWidget(MyselfInfo);rightlayout->addWidget(MyselfInfoTextEdit);rightlayout->addLayout(toprightlayout);// 右边下部分okbutton=new QPushButton("确认");cancelbutton=new QPushButton("退出");buttomLayout=new QHBoxLayout();buttomLayout->addStretch();buttomLayout->addWidget(okbutton);buttomLayout->addWidget(cancelbutton);QGridLayout *mlayout=new QGridLayout(this);//隐式设置Dialog的布局为mlayoutmlayout->setMargin(20);mlayout->setSpacing(10);//mlayout->addLayout(lLayout,0,0); // 左边mlayout->addLayout(qLayout,0,0);mlayout->addLayout(rightlayout,0,1); // 右上mlayout->addLayout(buttomLayout,1,0,1,2);//窗口会根据布局里内容的尺寸来自动调整初始大小,并且用户无法对窗口大小进行更改mlayout->setSizeConstraint(QLayout::SetFixedSize);//setLayout(mlayout);}

两个显示效果都是这个

在这里插入图片描述

http://www.lryc.cn/news/2378280.html

相关文章:

  • 无需配置光猫,使用网管交换机配合路由器的IPTV功能实现单线复用
  • C++类与对象--1 特性一:封装
  • Linux:计算机的层状结构
  • 【SpringBoot】关于MP使用中配置了数据库表前缀的问题
  • AI 赋能防艾宣传:从创意到实践,我的 IP 形象设计之旅
  • Redis 事务与管道:原理、区别与应用实践
  • 每日算法刷题Day9 5.17:leetcode定长滑动窗口3道题,用时1h
  • 手机打电话时如何将通话对方的声音在手机上识别成文字
  • 重排序模型解读:gte-multilingual-reranker-base 首个GTE系列重排模型诞生
  • C++学习:六个月从基础到就业——C++11/14:列表初始化
  • SQL语句执行问题
  • 2025系统架构师---选择题知识点(押题)
  • flutter flutter run 运行项目卡在Running Gradle task ‘assembleDebug‘...
  • P5682 [CSP-J2019 江西] 次大值
  • Elasticsearch 性能优化面试宝典
  • 【论文阅读】人脸修复(face restoration ) 不同先验代表算法整理2
  • 无监督学习在医疗AI领域的前沿:多模态整合、疾病亚型发现与异常检测
  • 计算机操作系统概要
  • C语言进阶-数组和函数
  • 图片通过滑块小图切换大图放大镜效果显示(Vue3)
  • [SSL]1Panel添加阿里云DNS账户
  • C语言编程中的时间处理
  • 计算机网络 : 网络基础
  • C++跨平台开发:突破不同平台的技术密码
  • 实现 STM32 PWM 输出:原理、配置与应用详解
  • Web 架构之负载均衡会话保持
  • 第一次做逆向
  • 【Linux网络】传输层协议TCP
  • AAAI-2025 | 中科院无人机导航新突破!FELA:基于细粒度对齐的无人机视觉对话导航
  • 排序算法之基础排序:冒泡,选择,插入排序详解