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:1layout->setColumnStretch(5,1);layout->setSpacing(10); //将垂直和水平间距都设置为间距10ui->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实现 栅格布局效果相关推荐

  1. Qt Designer中布局工具的使用

    从anaconda启动QtDesigner anaconda3是自带QtDesigner以及pyqt库的.QtDesigner的位置在%anaconda3%\Library\bin文件夹(其中%ana ...

  2. 【Qt教程】2.2 - Qt5 布局管理器(水平、垂直、栅格布局)、弹簧、设计一个登陆界面

    使用布局管理器,来设计一个登陆界面 都是操作,没代码没理论.参照:Qt设计一登陆窗口布局 1. 新建空工程 双击.ui文件,进入界面设计区. 我们新建工程时候,使用的是QMainWindow类,会自动 ...

  3. element-UI栅格系统缩放,导致页面布局效果bug? 叠加?错位?

    这里以此代码片段为例说明一则bug,请bug对号入座.(bug截图省略) 页面的栅格缩放,导致页面布局发生叠加错位? 一.坑1 · 引言: (先来一则bug代码) <el-card v-for= ...

  4. [Qt 教程之Widgets模块] —— QGridLayout栅格布局

    Qt系列教程总目录 文章目录 一.QGridLayout布局规则 二.创建QGridLayout 三.成员函数 1. 控件间距 2. 可拉伸控件(弹簧) 3. 最小行高/列宽 4. 行数和列数 5. ...

  5. Qt栅格布局GridLayout

    栅格布局就是二维数组一样的布局,每一个列的所有控件拥有同样的宽度. 每一行的所有控件拥有同样的高度. 同一行的所有控件占满整行. 如果同一行的控件没有占满一行,最后一个放进来的控件会自动水平拉伸. 如 ...

  6. python 读取鼠标选中文本_木辛老师的编程课堂:Python和Qt之页面布局实战篇(一)...

    通过前几节课的学习,我们已经基本上掌握了使用Qt Designer完成简单的布局管理.通过这些知识的学习,我们算是对PyQt进行了初步的了解,也算是入门了! 但是仅仅掌握这些知识还是远远不够的: 高深 ...

  7. Qt之格栅布局(QGridLayout)

     简述 QGridLayout:格栅布局,也被称作网格布局(多行多列). 栅格布局将位于其中的窗口部件放入一个网状的栅格之中.QGridLayout需要将提供给它的空间划分成的行和列,并把每个窗口 ...

  8. Qt 之格栅布局(QGridLayout)

    简述 QGridLayout:格栅布局,也被称作网格布局(多行多列). 栅格布局将位于其中的窗口部件放入一个网状的栅格之中.QGridLayout需要将提供给它的空间划分成的行和列,并把每个窗口部件插 ...

  9. [译] 你不需要基于 CSS Grid 的栅格布局系统

    本文讲的是[译] 你不需要基于 CSS Grid 的栅格布局系统, 原文地址:You do not need a CSS Grid based Grid System 原文作者:Rachel Andr ...

最新文章

  1. brain.js 时间序列_免费的Brain JS课程学习JavaScript中的神经网络
  2. java.lang.UnsatisfiedLinkError
  3. python【蓝桥杯vip练习题库】ADV-96复数求和
  4. 【Android工具】Cx文件管理器,Cx File Explorer安卓samba客户端
  5. 【Linux基础】 diff命令的参数详解和实例
  6. Linux问题分析与性能优化
  7. 调试U-Boot笔记(一)
  8. 最长对称字符串php_有哪些像TENET一样中心对称的英语单词(误)
  9. spring集成struts2
  10. GooglePerformanceTools--tcmalloc
  11. 飞书上线“程序员友好”功能 迎接1024程序员节
  12. js工作笔记003---js编写习惯_提高网页显示速度
  13. Java 跌落神坛,Python 继续夺冠....凭啥?
  14. QueryRunner类常用的方法
  15. 《最新黑客攻防实战从入门到精通(第2版)》.(武新华, 孙振辉 ).[PDF]ckook
  16. 解决office 2003安装了office 2007兼容包还是打不开office 2007的文件
  17. 【noip模拟题】华尔街的秘密
  18. 计算机网络---局域网与广域网
  19. word里文字竖向排列(设置竖排文字)
  20. Gboard键盘词库导入方法

热门文章

  1. 基于SSM+Vue的农产品商城系统Java水果销售管理系统 生鲜商城系统(源码调试+讲解+文档)
  2. mysql zimbra_zimbra的使用与管理
  3. date日期格式中文和英文显示
  4. python爬虫-百度/360搜索
  5. Spring的构造器注入
  6. Drupal菜鸟笔记之使用Paragraphs建站
  7. JavaScript判断对象中每一项属性都不为空
  8. NumPy 初学者指南中文第三版·翻译完成
  9. datatables 常用的操作、复杂表头
  10. Latex参考文献字体样式修改