Qt实现 栅格布局效果

Row、Column、Grid、Flow 与布局过渡 Qt Quick 提供了多种布局方式,每种布局都有自己的适用场景。Row和Column是最基础、最常用的布局方式,适合大多数简单界面。Grid适合规则的网格结构,尤其是等宽等高的项目。Flow适合需要自动换行的特殊场景,但不适合要求位置完全固定的界面。Transition则可以在布局变化时增加动画效果,让界面交互更自然。在实际开发中,不应盲目使用复杂布局,而应该根据界面需求、性能要求和后期维护成本选择合适的布局方式。 阅读详情

Qt提供QGridLayout类来实现栅格布局,所谓栅格,就是网格,拥有规律的行和列,通过QGridLayout可以很方便的对多个控件进行布局。

如果在设计师中进行拖拽绘制,一旦需求有变,需要增加或者删除控件,就被迫打破原来的布局,重新进行调整,这是一件很耗时的事件,

所以通过代码画,还能做到复用,往往是首选。

效果:

代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    teacher=new QLabel(this);
    student=new QLabel(this);
    subject=new QLabel(this);
    phone=new QLabel(this);
    phoneInput=new QLineEdit(this);
    btnok=new QPushButton(this);

    teabox=new QComboBox(this);
    stubox=new QComboBox(this);
    subbox=new QComboBox(this);
    layout=new QGridLayout(this);   //栅格布局

    teacher->setText("老师:");
    student->setText("学生:");
    subject->setText("科目:");
    phone->setText("电话:");
    btnok->setText("录入");
    teabox->addItem("赵柳");  //QComboBox添加项
    teabox->addItem("李柏");
    stubox->addItem("王炸");
    stubox->addItem("茅台");
    subbox->addItem("语文");
    subbox->addItem("数学");

    btnok->setFixedSize(100,40); //设置固定宽高

    layout->addWidget(teacher,0,0,1,1); //将部件添加到单元格中,可以设置跨越多个行列
    layout->addWidget(teabox,0,1,1,1);

    layout->addWidget(student,0,2,1,1); //第1行第2列 占据一行一列的宽度
    layout->addWidget(stubox,0,3,1,1);  //第1行第3列 占据一行一列的宽度

    layout->addWidget(subject,0,4,1,1);
    layout->addWidget(subbox,0,5,1,1);

    layout->addWidget(phone,1,0,1,1);
    layout->addWidget(phoneInput,1,1,1,1);
    layout->addWidget(btnok,1,5,1,1);//第2行第5列 占据一行一列的宽度

    layout->setColumnStretch(1,1);  //设置列的拉伸因子
    layout->setColumnStretch(3,1);  //第1列和第3列、第5列的比例为1:1:1
    layout->setColumnStretch(5,1);

    layout->setSpacing(10); //将垂直和水平间距都设置为间距10
    ui->groupBox->setLayout(layout);
}

MainWindow::~MainWindow()
{
    delete ui;
}

通过QGridLayout类的addWidget函数,来添加需要放置的控件。

以addWidget(phone,1,0,1,1)为例,表示将phone控件放置在布局的第2行,第1列,占据1行一列。

删除指定的控件:

比如需要动态移除上面某个的控件时,就需要进行对应的处理,下面是移除电话相关的控件:

QLayoutItem *item;
while((item=layout->takeAt(0))!=0)
{
    if((item->widget()==phone)||(item->widget()==phoneInput)){
        item->widget()->setParent(NULL);
        delete item;
    }else{
        continue;
    }
}
this->update();    //刷新

​

通过takeAt()函数来依次拿到在layout上的控件,采用QLayoutItem的widget()函数来判断是不是对应的控件。

如果匹配,先将其父对象设置为空,然后删除即可。删除完毕后调用update刷新界面。

Qt界面美化实战:从QSS样式表到自定义控件,打造专业级桌面应用界面 在桌面应用开发中,界面美化是提升用户体验和软件专业度的关键环节。Qt作为跨平台的C++框架,其强大的QWidgets体系通过样式表(QSS)技术,能够实现媲美现代UI框架的视觉效果。QSS借鉴了CSS的语法原理,允许开发者以声明式方式精确控制控件颜色、边框、字体等属性,其选择器机制和伪状态支持为复杂交互提供了基础。这项技术的核心价值在于,它让传统桌面应用在保持高性能和丰富控件库优势的同时,也能拥有现代化的视觉表现力,从而广泛应用于工业软件、科学计算工具、企业级管理系统等对稳定性和定制化要求高的场景。本文聚焦 阅读详情

相关推荐

QT的栅格布局详解

栅格布局(QGridLayout),也称网格布局,是一种将窗口分割为行和列的网格,每个控件放置在网格的一个或多个单元格内排列的一种布局,我们可以根据需要指定行数和列数,以决定网格的大小和布局。网格布局非常的高效和灵活,当需要增加或删除控件时,很容易地就可以调整,而不需要重新打破原有的布局重新来过。

qq_52137592的博客 4209

【QT】——布局

Qt 窗口布局是指将中的一种处理方式。

sjp11的博客 3597

Qt中什么时候使用栅格布局,什么时候使用垂直和横向布局?

在Qt开发中,复杂的布局一直都是需要重点关注的问题。 如果你需要将某个文字放在一个widget的中间,尽量不要使用栅格,而是使用左右各一个expanding弹簧,中间文字的效果就可以了。 示例代码如下: 测试Qt垂直布局与栅格布局中间放文字效果 ...

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 1568

Qt栅格布局管理器(QGridLayout)

Example:Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { QGridLayout* layout = new QGridLayout(); QLabel* l1 = new QLabel("Name(N)"); QLineEdit* name = new QL

RGBMarco的博客 2100

基于PyQt5实现界面控件自适应大小

PyQt5 My Environment PyCharm 2019.2 Qt Desinger PyUIC 实现效果 界面控件自适应大小,点击窗口放大后,界面控件大小随之发生变化。 实例1 点击窗口放大后: 实例2 点击窗口放大后: 实现过程 首先需要利用Qt Desinger设计大致的控件布局; 点击窗口layout选择栅格布局(局部和全局自适应均适用,局部自适应最好把控件放到一个frame中,之后进行布局); 点击minnumsize和maxnumsize调整控件大小,有时候需要利用一

CJW的博客 2万+

ENVI5.6 Seamless Mosaic多景影像镶嵌色差问题

多景影像无缝镶嵌色差问题拟解决方法

Matchaya的博客 7703

QT解决将控件加到隐藏界面的布局时,控件布局混乱问题

解决方法:在界面隐藏时,添加控件进入布局前先将控件隐藏,将控件添加到布局后,即使前面设置过界面的布局了,仍要重新设置界面布局(我也不知道为啥),最后再将控件显示出来。//需要重新设置界面布局。一定要先隐藏后添加入布局。

FWY0x7CF的博客 1882

信息隐藏 数字图像空域隐写与分析技术的实现

【代码】信息隐藏 数字图像空域隐写与分析技术的实现。

Yungoal的博客 468

QT控件隐藏仍保留其布局

QT控件隐藏仍保留其布局

qq_27081181的博客 6372

嵌入式开发实战:如何用cJSON库在STM32上实现轻量级JSON通信(附完整代码)

本文详细介绍了如何在STM32嵌入式系统中使用cJSON库实现高效的JSON通信方案。针对嵌入式环境的内存限制,提供了内存优化策略、cJSON库的深度定制方法以及完整的通信流程实现代码,帮助开发者解决JSON解析效率低下和跨平台兼容性等核心挑战。

star5的专栏 471

Win10家庭版如何添加本地用户和组

在众多Windows版本中,Windows 10以其丰富的功能和卓越的性能吸引了大量用户。然而,对于使用Win10家庭版的用户来说,他们可能会遇到一些功能上的限制,特别是在用户和组管理方面。虽然家庭版在某些高级功能上有所缩减,但我们仍然可以通过一些技巧来实现对本地用户和组的管理。本文将详细介绍如何在Win10家庭版中添加本地用户和组,以便用户能够更好地管理计算机资源。

nntxthml的博客 4555

关于qt中grid layout删除对象再添加后布局出现重叠的问题

打印了下addwidget的坐标传参也是正确的,但是在界面上显示出现问题,所以合理怀疑不是代码逻辑的问题,而是gridlayout内部布局的问题。我定义了一个QVector类型的数据将这些对象统一管理,然后在删除对象后再遍历QVector,将里面的对象重新按照位置顺序加入到gridlayout中,问题解决。像这样,虽然我删除掉了一个button,但是占位依然存在,所以即使逻辑上我们传入的坐标参数是正确的,但是在界面上看还是和最后一个widget重合了,但删除最后一个对象不会出现这种问题。

weixin_45909594的博客 709

微信小程序 - 最新图片组拖拽排序更换位置功能,类似微信朋友圈九宫格图片的拖动排序效果,微信小程序实现九宫格图片拖拽调换位置,小程序详细实现图像拖曳拖动切换位置排序功能(详细示例代码,一键复制开箱即用

微信小程序,wechat,小程序,图片排序,图像排序,九宫格拖拽排序,拖曳,拖动,拖拽,仿微信朋友圈,朋友圈宫格图片排序,微信朋友圈图片拖动排序效果,实现九宫格图片拖拽,图像拖拽排序组件插件,小程序实现拖拽图片切换图片位置,图片拖动互换位置,图像拖拽切换位置,九宫格图片组合拖动排序,交换九宫格图片的位置,小程序上传图片后,如何实现拖拽排序功能,小程序怎么实现图片拖拽排序,微信小程序图片上传,九宫格拖拽组件,选择图片并拖动_微信小程序图片拖拽,微信小程序长按拖拽排序,图像的拖拽移动,多图拖拽排序功能,实现九宫

✅ 精选推荐文章 4453

Qt实现栅格布局效果

Qt实现栅格布局效果

m0_73443478的博客 932

【原创】下载RealEstate10K数据集原始视频的方法

目前互联网上能搜到下载RealEstate10K数据集原始视频的方法都已经不能用了,这篇博客介绍一种目前可用的下载RealEstate10K数据集原始视频的方法,并给出自动化的脚本代码。

沉迷单车的追风少年 2461

Langchain cannot connect with Azure SQL Database

Langchain 无法连接到 Azure SQL 数据库

suiusoar 633

Qt开发 | Qt界面布局 | 水平布局 | 竖直布局 | 栅格布局 | 分裂器布局 | setLayout使用 | 添加右键菜单 | 布局切换与布局删除重构

这种布局通常用于需要动态调整空间分配的界面,例如在文本编辑器中调整工具栏和文本区域的大小。栅格布局非常适合需要将控件整齐排列在表格中的场景。还可以通过将窗口小部件作为参数传递给布局的构造函数来设置布局,这样窗口小部件就会自动接管布局的所有权。控件按照从上到下的顺序排列,也可以设置控件之间的间距。水平布局将控件水平排列。控件按照从左到右的顺序排列,可以设置控件之间的间距。介绍手写水平布局,不使用ui设计器来设置布局,因此,可将ui文件等删掉。通过右键菜单项,实现布局的切换与布局删除重构。往布局里添加分裂器。

zwcslj的博客 3761

【OpenClaw从入门到精通】第07篇:2026实测!零基础开发OpenClaw自定义Skill——招聘外呼自动邀约完整教程

本文聚焦OpenClaw自定义Skill开发全流程,针对现成技能无法满足个性化场景(如专属招聘流程、内部系统对接)的痛点,以“招聘外呼自动邀约”为实战案例,从概念认知、环境搭建、分步开发到测试优化,手把手教读者从零构建自定义Skill。内容涵盖Skill目录结构、SKILL.md核心配置、Python主逻辑实现、API对接、安全配置等关键环节,融入2026年ClawHavoc事件安全警示,强调最小权限、凭证安全等开发原则。所有代码经实测可运行,步骤详尽且兼顾新手友好与进阶需求。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1193

Qt实现的流式布局,20行代码实现

在我们进行应用程序开发时,流式布局是很常见 的一种布局。Qt中自带的布局并没有实现流式布局,因此我们需要自己实现。写之前看了网上几篇流式布局的博客,感觉实现的比较麻烦,代码不够简洁,不太能满足博主的需要,于是决定自己实现,本篇博客中实现的流式布局应该是全网代码量最少的流式布局了,代码比较简单,但是效果还是不错的。 博主在项目中实现的效果如下图所示: 思路比较简单: 利用栅格布局和scrollA...

kongwei1234的博客 2043

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Qt界面设计时使各控件依据窗口缩放进行栅格布局的方法

Qt界面设计时使各控件依据窗口缩放进行栅格布局的方法

462

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

qt界面布局之Layout

感谢来自善意的提醒: 一、使用Layout与不使用的区别 1、qt中不使用的布局样式: 看出来即使使用了水平布局但是依然会发现界面中会出现空白留存,这种情况下普通的托动是不会发生改变的, 所以这个时候需要采取其他的方式进行更改,这个时候就用到了layout 使用的前提是首先你已经进行了水平布局、垂直布局或者是栅格布局来布局完毕。如上图所示,你已经完成了 2、选中你布局完毕的整个图,...

Littlehero_121的博客 2481

QT实现widget在布局最上层且不影响下方的显示

五、如果不需要侧面菜单栏,就直接删除label,并且设置layoutVerticalSpacing为0。二、先创建两个widget(不要嵌入,但要覆盖),然后再设置一个单独的控件(我设置的是label)。2、将黄色的widget放在前面,就可以看到下方的widget并没有受到影响。查阅了挺多的资料没看到相关的内容,自己瞎琢磨了下,有好方法希望能给我评论。三、使用centralwidget布局(栅格布局)1、现在已经可以成型了(可以制作侧面的菜单栏了)四、设置栅格布局的数值。

2301_80523750的博客 919

QT开发——P7+P8仿写一个智能家居界面(中)(下)

。

LDBH66的博客 194

QT 如何使用设计师写一个Widget其内容可以随Widget大小变化而变化

1.使用代码实现: QGridLayout* layout = new QGridLayout(); widget->setLayout(layout); 2.使用设计师: 在界面中添加一个元件 1.在界面空白处右键点击,选择“布局”,选择栅格布局 2.或者在找到设计师界面右侧的对象树的根节点,右键点击,同上 3.点击空白处,选择整个界面,点击上方菜单的布局模式 注意直接添加布局是不能全屏的 ...

Finull1的博客 1039

Qt布局随控件的缩放

我的MainWindow窗口有3个控件,分别是IistWidget和openGLWidget。首先设定listwidget的高和openGLWidget一致,并设置MainWindow的窗口尺寸,使得MainWindow、listWidget、openGLWidget合理,然后选中listWidget和openGLWidget为栅格布局(gridlayout),并设定缩放参数为expanding,...

qq_27699037的博客 1083

【QT入门】 Qt代码创建布局之栅格布局详解

【QT入门】 Qt代码创建布局之栅格布局详解

LF__plus的博客 3860
上一篇: linux下线程同步之条件变量
下一篇: c++接口与虚析构函数作用
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值