最近在修改一个软件的过程中,把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 动态添加控件,并删除指定控件相关推荐

  1. Quartz动态添加,修改,删除任务(暂停,任务状态,恢复,最近触发时间)

    首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 写博客 小程序 消息 登录注册 关闭 quartz_Cron表达式一分钟教程 09-05 ...

  2. Quartz动态添加、修改和删除定时任务

    2019独角兽企业重金招聘Python工程师标准>>> Quartz动态添加.修改和删除定时任务 转载于:https://my.oschina.net/haokevin/blog/1 ...

  3. javascript动态添加、修改、删除对象的属性和方法

    上一节介绍了如何引用一个对象的属性和方法,现在介绍如何为一个对象添加.修改或 者删除属性和方法. 在其他语言中,对象一旦生成,就不可更改了,要为一个对象添加修改成员必须要在对 应的类中修改,并重新实例 ...

  4. java 动态加载控件_JS动态添加节点后渲染为EasyUI控件,EasyUI动态渲染解析解决方案...

    这是个小菜在实际工作中遇到的问题,相信很多EasyUI新手很可能也遇到这样的问题,因此小菜觉得有必要拿出来分享一下. 这个问题要从EasyUI的datebox组件说起,小菜用这个组件的时候,发现用$( ...

  5. springboot整合quartz实现动态添加、修改、删除、停止job,以及优化quartz工具类,支持自动停止逻辑

    原文链接:http://pengfeiguo.com/article/16 什么是Quartz? 一个定时任务调度框架,简单易用,功能强大可以使实现定时任务的. 优点: 支持集群下定时任务处理 支持任 ...

  6. Winform根据控件名获取指定控件

    /// <summary> /// 根据指定容器和控件名字,获得控件 /// </summary> /// <param name="obj"> ...

  7. qt动态添加窗口到垂直布局

    引言 程序运行的过程中根据需要动态的创建窗口,没创建一个窗口,就加入列表中,使其竖直展示各个窗口.这样的操作实际是没创建一个窗口,就将其加入到垂直布局中,当点击不同的窗口时能够实现对被点击串钩的区分, ...

  8. jQuery的创建对象,动态添加、修改、删除属性和方法

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>< ...

  9. 【JS】js给对象动态添加、设置、删除属性名和属性值

    1. 访问对象属性 js中访问对象属性一共有两种方法:点获取法和方括号获取法. let user = { // 一个对象name: "John", // 键 "name& ...

  10. android动态添加控件在指定位置,Android 如何动态添加 View 并显示在指定位置。

    引子 最近,在做产品的需求的时候,遇到 PM 要求在某个按钮上添加一个新手引导动画,引导用户去点击.作为 RD,我哗啦啦的就写好相关逻辑了.自测完成后,提测,PM Review 效果. 看完后,PM ...

最新文章

  1. c语言多线程mysql_多线程读写mysql数据库
  2. 虚机如果要访问SAN中的多个LUN,如何实现高可用
  3. 用神经网络做分子模型是不是扯淡,f2,cl2,br2分子模型
  4. python装饰器简单理解的小demo
  5. SAP 电商云 Spartacus UI CI 脚本分析
  6. linux查询日志中页面返回状态码,[linux shell] Shell脚本实现apache日志中的状态码分析...
  7. 当javaScript从入门到提高前需要注意的细节:变量部分
  8. React开发(157):一级直接用getFieldDecorator
  9. Python中用pandas将numpy中的数组数据保存到csv文件
  10. Unity3D内存释放
  11. linux下载m3u8工具,m3u8命令行下载工具
  12. 冲印常见问题杂锦(网上摘录)
  13. hdu1411知六边长求四面体体积
  14. 2017吉比特校招一个编程笔试题
  15. 5G无线技术基础自学系列 | 网络架构
  16. 程序员专用的简历神器,让你制作简历更简单,方便,专业
  17. 北航大学计算机学院新媒体艺术系,本科优秀毕业论文参考-北航新媒体与艺术学院-北京航空航天大学.doc...
  18. RGB、Lab、YUV、HSI、HSV等颜色空间的区别
  19. 用实际例子详细探究OpenCV的轮廓绘制函数drawContours()
  20. 不能bostype没有元数据异常_金蝶EAS_BOS工作笔记

热门文章

  1. oracle imp加快速度,加快IMP速度
  2. Unity3D场景性能优化/渲染/卡顿/搭建优化 遮挡剔除/层消距离技术/LOD(多层次细节)
  3. linux压缩文件方式,在 Linux 上压缩文件的 5 种方法
  4. kangle虚拟主机系统easypanel使用教程
  5. 2021-2027全球与中国工程项目物流市场现状及未来发展趋势
  6. 重回童年的经典系列 |《保卫萝卜》来了,你还记得它吗?复刻 源码+解析 @怀旧的你
  7. excel文件打不开怎么办_移动硬盘打不开提示格式化怎么办?
  8. 微信公众号svg互动_“戴上太阳镜,弗兰克”:与SVG面罩的互动
  9. 你真的了解width这个属性吗
  10. 毕业论文参考文献中出版社和出版地的查询