Qt实现 栅格布局效果
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实现 栅格布局效果相关推荐
- Qt Designer中布局工具的使用
从anaconda启动QtDesigner anaconda3是自带QtDesigner以及pyqt库的.QtDesigner的位置在%anaconda3%\Library\bin文件夹(其中%ana ...
- 【Qt教程】2.2 - Qt5 布局管理器(水平、垂直、栅格布局)、弹簧、设计一个登陆界面
使用布局管理器,来设计一个登陆界面 都是操作,没代码没理论.参照:Qt设计一登陆窗口布局 1. 新建空工程 双击.ui文件,进入界面设计区. 我们新建工程时候,使用的是QMainWindow类,会自动 ...
- element-UI栅格系统缩放,导致页面布局效果bug? 叠加?错位?
这里以此代码片段为例说明一则bug,请bug对号入座.(bug截图省略) 页面的栅格缩放,导致页面布局发生叠加错位? 一.坑1 · 引言: (先来一则bug代码) <el-card v-for= ...
- [Qt 教程之Widgets模块] —— QGridLayout栅格布局
Qt系列教程总目录 文章目录 一.QGridLayout布局规则 二.创建QGridLayout 三.成员函数 1. 控件间距 2. 可拉伸控件(弹簧) 3. 最小行高/列宽 4. 行数和列数 5. ...
- Qt栅格布局GridLayout
栅格布局就是二维数组一样的布局,每一个列的所有控件拥有同样的宽度. 每一行的所有控件拥有同样的高度. 同一行的所有控件占满整行. 如果同一行的控件没有占满一行,最后一个放进来的控件会自动水平拉伸. 如 ...
- python 读取鼠标选中文本_木辛老师的编程课堂:Python和Qt之页面布局实战篇(一)...
通过前几节课的学习,我们已经基本上掌握了使用Qt Designer完成简单的布局管理.通过这些知识的学习,我们算是对PyQt进行了初步的了解,也算是入门了! 但是仅仅掌握这些知识还是远远不够的: 高深 ...
- Qt之格栅布局(QGridLayout)
简述 QGridLayout:格栅布局,也被称作网格布局(多行多列). 栅格布局将位于其中的窗口部件放入一个网状的栅格之中.QGridLayout需要将提供给它的空间划分成的行和列,并把每个窗口 ...
- Qt 之格栅布局(QGridLayout)
简述 QGridLayout:格栅布局,也被称作网格布局(多行多列). 栅格布局将位于其中的窗口部件放入一个网状的栅格之中.QGridLayout需要将提供给它的空间划分成的行和列,并把每个窗口部件插 ...
- [译] 你不需要基于 CSS Grid 的栅格布局系统
本文讲的是[译] 你不需要基于 CSS Grid 的栅格布局系统, 原文地址:You do not need a CSS Grid based Grid System 原文作者:Rachel Andr ...
最新文章
- brain.js 时间序列_免费的Brain JS课程学习JavaScript中的神经网络
- java.lang.UnsatisfiedLinkError
- python【蓝桥杯vip练习题库】ADV-96复数求和
- 【Android工具】Cx文件管理器,Cx File Explorer安卓samba客户端
- 【Linux基础】 diff命令的参数详解和实例
- Linux问题分析与性能优化
- 调试U-Boot笔记(一)
- 最长对称字符串php_有哪些像TENET一样中心对称的英语单词(误)
- spring集成struts2
- GooglePerformanceTools--tcmalloc
- 飞书上线“程序员友好”功能 迎接1024程序员节
- js工作笔记003---js编写习惯_提高网页显示速度
- Java 跌落神坛,Python 继续夺冠....凭啥?
- QueryRunner类常用的方法
- 《最新黑客攻防实战从入门到精通(第2版)》.(武新华, 孙振辉 ).[PDF]ckook
- 解决office 2003安装了office 2007兼容包还是打不开office 2007的文件
- 【noip模拟题】华尔街的秘密
- 计算机网络---局域网与广域网
- word里文字竖向排列(设置竖排文字)
- Gboard键盘词库导入方法