Qt 动态添加控件,并删除指定控件
最近在修改一个软件的过程中,把Qt控件进行了重写,重写之后,布局更加简单、合理,如此使得出现bug的概率降低。
实现的功能
1、将零散的小控件打包成一个模块,进行整模块的添加。
2、实现每个模块的单独删除。
3、实现数值、功能的交互功能。如按钮等。
代码内容
话不多说,直接上代码。因为是顺手写的,注释不多,自己领会吧,工程文件放在文末。
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <testform.h>
#include <QDebug>
#include <QMessageBox>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();QGridLayout *m_gLayout;QList<testForm *>mtestForms;int count;void delete_Layout();private slots:void on_add_btn_clicked();void mdel_btn_clicked();private:Ui::MainWindow *ui;
signals:void add_info(int num);
};#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);m_gLayout=new QGridLayout;ui->widget->setLayout(m_gLayout);count=0;
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_add_btn_clicked()
{if(ui->lineEdit->text()!=""){count=mtestForms.size();testForm *mtestForm=new testForm();mtestForms.append(mtestForm);mtestForm->setEdit(ui->lineEdit->text());connect(mtestForm,SIGNAL(mdel()),this,SLOT(mdel_btn_clicked()));m_gLayout->addWidget(mtestForm);}else{QMessageBox::information(this,"warming","请输入类别");}
}void MainWindow::mdel_btn_clicked()
{testForm *tf = qobject_cast<testForm *>(sender()); //这一步能够判断你点击的是哪一个控件m_gLayout->removeWidget(tf);tf->deleteLater();
}
testfom.h
#ifndef TESTFORM_H
#define TESTFORM_H
#include <QWidget>
#include <QGroupBox>
#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QTimer>
#include <QDebug>
class testForm:public QWidget
{Q_OBJECT
public:testForm();QPushButton *m_btn_start;QPushButton *m_btn_delete;QLabel *m_label_Name;QLabel *m_label_Count;QLineEdit *m_lineEidt;QHBoxLayout *m_hlayoutLabel;QTimer *ask_COM_Timer;void setEdit(QString type);int count;
private slots:void del_btn_click();void startTimer();void printcount();
signals:void mdel();
};#endif // TESTFORM_H
testfom.cpp
#include "testform.h"testForm::testForm()
{m_btn_start=new QPushButton();connect(m_btn_start,SIGNAL(clicked()),this,SLOT(startTimer()));m_btn_start->setText("启动");m_btn_delete=new QPushButton();connect(m_btn_delete,SIGNAL(clicked()),this,SLOT(del_btn_click()));m_btn_delete->setText("删除");ask_COM_Timer=new QTimer(this);ask_COM_Timer->setInterval(1000);connect(ask_COM_Timer,SIGNAL(timeout()),this,SLOT(printcount()));m_label_Name=new QLabel();m_label_Count=new QLabel();m_lineEidt=new QLineEdit();m_hlayoutLabel=new QHBoxLayout;m_hlayoutLabel->addWidget(m_btn_start,0,nullptr);m_hlayoutLabel->addWidget(m_lineEidt,1,nullptr);m_hlayoutLabel->addWidget(m_label_Name,2,nullptr);m_hlayoutLabel->addWidget(m_label_Count,3,nullptr);m_hlayoutLabel->addStretch(4);m_hlayoutLabel->addWidget(m_btn_delete,5,nullptr);this->setLayout(m_hlayoutLabel);QSizePolicy policy = this->sizePolicy();policy.setHorizontalPolicy(QSizePolicy::Preferred);policy.setVerticalPolicy(QSizePolicy::Fixed);this->setSizePolicy(policy);
}void testForm::del_btn_click()
{emit mdel();
}
void testForm::setEdit(QString type)
{m_lineEidt->setText(type);m_label_Name->setText(type);
}
void testForm::startTimer()
{count=0;if(m_btn_start->text()=="启动"){ask_COM_Timer->start();m_btn_start->setText("停止");}else if(m_btn_start->text()=="停止"){ask_COM_Timer->stop();m_btn_start->setText("启动");}}
void testForm::printcount(){qDebug()<<m_lineEidt->text()+" "+QString::number(count);m_label_Count->setText(QString::number(count));count++;
}
工程文件下载:动态增减控件代码
Qt 动态添加控件,并删除指定控件相关推荐
- Quartz动态添加,修改,删除任务(暂停,任务状态,恢复,最近触发时间)
首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 写博客 小程序 消息 登录注册 关闭 quartz_Cron表达式一分钟教程 09-05 ...
- Quartz动态添加、修改和删除定时任务
2019独角兽企业重金招聘Python工程师标准>>> Quartz动态添加.修改和删除定时任务 转载于:https://my.oschina.net/haokevin/blog/1 ...
- javascript动态添加、修改、删除对象的属性和方法
上一节介绍了如何引用一个对象的属性和方法,现在介绍如何为一个对象添加.修改或 者删除属性和方法. 在其他语言中,对象一旦生成,就不可更改了,要为一个对象添加修改成员必须要在对 应的类中修改,并重新实例 ...
- java 动态加载控件_JS动态添加节点后渲染为EasyUI控件,EasyUI动态渲染解析解决方案...
这是个小菜在实际工作中遇到的问题,相信很多EasyUI新手很可能也遇到这样的问题,因此小菜觉得有必要拿出来分享一下. 这个问题要从EasyUI的datebox组件说起,小菜用这个组件的时候,发现用$( ...
- springboot整合quartz实现动态添加、修改、删除、停止job,以及优化quartz工具类,支持自动停止逻辑
原文链接:http://pengfeiguo.com/article/16 什么是Quartz? 一个定时任务调度框架,简单易用,功能强大可以使实现定时任务的. 优点: 支持集群下定时任务处理 支持任 ...
- Winform根据控件名获取指定控件
/// <summary> /// 根据指定容器和控件名字,获得控件 /// </summary> /// <param name="obj"> ...
- qt动态添加窗口到垂直布局
引言 程序运行的过程中根据需要动态的创建窗口,没创建一个窗口,就加入列表中,使其竖直展示各个窗口.这样的操作实际是没创建一个窗口,就将其加入到垂直布局中,当点击不同的窗口时能够实现对被点击串钩的区分, ...
- jQuery的创建对象,动态添加、修改、删除属性和方法
<!DOCTYPE html> <html><head><meta charset="utf-8"><title>< ...
- 【JS】js给对象动态添加、设置、删除属性名和属性值
1. 访问对象属性 js中访问对象属性一共有两种方法:点获取法和方括号获取法. let user = { // 一个对象name: "John", // 键 "name& ...
- android动态添加控件在指定位置,Android 如何动态添加 View 并显示在指定位置。
引子 最近,在做产品的需求的时候,遇到 PM 要求在某个按钮上添加一个新手引导动画,引导用户去点击.作为 RD,我哗啦啦的就写好相关逻辑了.自测完成后,提测,PM Review 效果. 看完后,PM ...
最新文章
- c语言多线程mysql_多线程读写mysql数据库
- 虚机如果要访问SAN中的多个LUN,如何实现高可用
- 用神经网络做分子模型是不是扯淡,f2,cl2,br2分子模型
- python装饰器简单理解的小demo
- SAP 电商云 Spartacus UI CI 脚本分析
- linux查询日志中页面返回状态码,[linux shell] Shell脚本实现apache日志中的状态码分析...
- 当javaScript从入门到提高前需要注意的细节:变量部分
- React开发(157):一级直接用getFieldDecorator
- Python中用pandas将numpy中的数组数据保存到csv文件
- Unity3D内存释放
- linux下载m3u8工具,m3u8命令行下载工具
- 冲印常见问题杂锦(网上摘录)
- hdu1411知六边长求四面体体积
- 2017吉比特校招一个编程笔试题
- 5G无线技术基础自学系列 | 网络架构
- 程序员专用的简历神器,让你制作简历更简单,方便,专业
- 北航大学计算机学院新媒体艺术系,本科优秀毕业论文参考-北航新媒体与艺术学院-北京航空航天大学.doc...
- RGB、Lab、YUV、HSI、HSV等颜色空间的区别
- 用实际例子详细探究OpenCV的轮廓绘制函数drawContours()
- 不能bostype没有元数据异常_金蝶EAS_BOS工作笔记
热门文章
- oracle imp加快速度,加快IMP速度
- Unity3D场景性能优化/渲染/卡顿/搭建优化 遮挡剔除/层消距离技术/LOD(多层次细节)
- linux压缩文件方式,在 Linux 上压缩文件的 5 种方法
- kangle虚拟主机系统easypanel使用教程
- 2021-2027全球与中国工程项目物流市场现状及未来发展趋势
- 重回童年的经典系列 |《保卫萝卜》来了,你还记得它吗?复刻 源码+解析 @怀旧的你
- excel文件打不开怎么办_移动硬盘打不开提示格式化怎么办?
- 微信公众号svg互动_“戴上太阳镜,弗兰克”:与SVG面罩的互动
- 你真的了解width这个属性吗
- 毕业论文参考文献中出版社和出版地的查询