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

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.xdnf.cn/news/6931.html

相关文章:

  • SVGPlay:一次 CodeBuddy 主动构建的动画工具之旅
  • GO语言学习(三)
  • 项目管理学习-CSPM-4考试总结
  • VC++6.0分步执行常见问题及解决方案
  • 阿里云国际站与国内站的核心布局与本土化服务的选择
  • Linux中的进程
  • 提示词工程框架:CoT、ToT、GoT、PoT( 链式提示)
  • MySQL 索引优化以及慢查询优化
  • Linux面试题集合(2)
  • 20250517 我设想一个空间,无限大,空间不与其中物质进行任何作用,甚至这个空间能容纳可以伸缩的空间
  • 【技巧】GoogleChrome浏览器开发者模式查看dify接口
  • Day119 | 灵神 | 二叉树 | 二叉树的最近共公共祖先
  • C43-指针与数组
  • [已解决] LaTeX “Unicode character“ 报错 (中文字符处理)
  • MySQL高可用架构
  • 深入解析Spring Boot与Spring Security的集成实践
  • 游戏详情制作(Navigation组件)
  • 语音合成终身免费畅用![特殊字符] 紧急提醒:禁用更新锁死权限!
  • 电脑桌面便签软件哪个好用?好用便签Windows版下载推荐
  • 大麦(Hordeum vulgare)中 BAHD 超家族酰基转移酶-文献精读129
  • 关于Android Studio for Platform的使用记录
  • 2025最新的软件测试面试大全(含答案+文档)
  • 系统架构设计(十):结构化编程
  • Linux线程同步信号量
  • hbuilderX 安装Prettier格式化代码
  • 哈希的原理、实现
  • 如何通过交流沟通实现闭环思考模式不断实现自身强效赋能-250517
  • 解决“没有找到有效的sudoers资源,退出”
  • 系分论文《论系统需求分析方法及应用》
  • 【通用智能体】Search Tools:Open Deep Research 项目实战指南