首先说明一下写这个的原因(很多人疑惑,不是qt自己就可以创建类吗,你写这个不是多此一举吗?),
我是在vs编译环境下搭载qt库,所以每次用vs创建qt的类都只会给你一个什么都没有的.h和.cpp文件,所有的东西需要自己手动添加,我绝的很麻烦。所以干脆自己写一个造类器。
原理很简单,就是将字符串拼接,然后写入文件。
直接看代码
.h文件

#ifndef CREATEQTCLASS_H
#define CREATEQTCLASS_H#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>class CreateQtClass : public QWidget
{Q_OBJECTpublic:CreateQtClass(QWidget *parent = 0);~CreateQtClass();void Init();protected slots:void on_CancleClicked();void on_CreateClicked();
protected:void CreateHClass(QString i_filePath,QString i_className,QString i_baseName);void CreateCppClass(QString i_filePath,QString i_className,QString i_baseName);
private:QLabel *m_pIconAndText=nullptr;QLabel *m_pClassNameLabel=nullptr;QLabel *m_pBaseClassNamelabel=nullptr;QLineEdit *m_pClassNameEdit=nullptr;QLineEdit *m_pBaseNameEdit=nullptr;QPushButton *m_pCreateBtn=nullptr;QPushButton *m_pCancleBtn=nullptr;
};#endif // CREATEQTCLASS_H

.cpp文件

#include "createqtclass.h"
#include <QHBoxLayout>
#include <QDir>
#include <QString>
#include <QDebug>
#include <QApplication>
#include <QMessageBox>CreateQtClass::CreateQtClass(QWidget *parent): QWidget(parent)
{Init();
}CreateQtClass::~CreateQtClass()
{}void CreateQtClass::Init()
{m_pCreateBtn=new QPushButton(tr("Create"),this);m_pCancleBtn=new QPushButton(tr("Reset"),this);QHBoxLayout *btnLayout=new QHBoxLayout(this);btnLayout->addStretch();btnLayout->addWidget(m_pCreateBtn);btnLayout->addWidget(m_pCancleBtn);btnLayout->setMargin(0);btnLayout->setSpacing(5);QWidget *btnWgt=new QWidget(this);btnWgt->setLayout(btnLayout);m_pClassNameLabel=new QLabel(tr("Class Name:"),this);m_pBaseClassNamelabel=new QLabel(tr("Base Name:"),this);m_pBaseNameEdit=new QLineEdit(this);m_pClassNameEdit=new QLineEdit(this);QGridLayout *gridLayout=new QGridLayout(this);gridLayout->addWidget(m_pClassNameLabel,0,0);gridLayout->addWidget(m_pClassNameEdit,0,1);gridLayout->addWidget(m_pBaseClassNamelabel,1,0);gridLayout->addWidget(m_pBaseNameEdit,1,1);gridLayout->setMargin(0);QWidget *gridWgt=new QWidget(this);gridWgt->setLayout(gridLayout);m_pIconAndText=new QLabel(tr("Create QT Class"),this);QFont ft;ft.setPointSize(20);ft.setBold(true);m_pIconAndText->setFont(ft);m_pIconAndText->setAlignment(Qt::AlignCenter);QVBoxLayout *mainLayout=new QVBoxLayout(this);mainLayout->addWidget(m_pIconAndText);mainLayout->addWidget(gridWgt);mainLayout->addWidget(btnWgt);mainLayout->setSpacing(0);mainLayout->setMargin(0);this->setLayout(mainLayout);connect(m_pCancleBtn,&QPushButton::clicked,this,&CreateQtClass::on_CancleClicked);connect(m_pCreateBtn,&QPushButton::clicked,this,&CreateQtClass::on_CreateClicked);
}void CreateQtClass::on_CancleClicked()
{m_pBaseNameEdit->clear();m_pClassNameEdit->clear();
}void CreateQtClass::on_CreateClicked()
{QDir dir;QString strFolder="D:/File";if(!dir.exists(strFolder)){dir.mkpath(strFolder);}QString strClassName=m_pClassNameEdit->text();QString strBaseClassName=m_pBaseNameEdit->text();if(strClassName==""||strBaseClassName==""){QMessageBox::warning(this,tr("Error"),tr("ClassName is null or BaseClassName is null"));}else{CreateHClass(strFolder,strClassName,strBaseClassName);CreateCppClass(strFolder,strClassName,strBaseClassName);}this->close();
}void CreateQtClass::CreateHClass(QString i_filePath,QString i_className,QString i_baseName)
{QFile file;file.setFileName(i_filePath+"/"+i_className+".h");QString classNameuper=i_className.toUpper();if(file.open(QIODevice::WriteOnly |QIODevice::Text)){QString str1=QString("#ifndef %1_H").arg(classNameuper);QString str2=QString("#define %1_H").arg(classNameuper);QString str3="#include <QWidget>";QString str4=QString("#include <%1>").arg(i_baseName);QString str5=QString("class %1 : public %2").arg(i_className).arg(i_baseName);QString str6="{";QString str7="    Q_OBJECT";QString str8="public:";QString str9=QString("    %1(QWidget *parent=0);").arg(i_className);QString str10=QString("    ~%1").arg(i_className);QString str11="    void Init();";QString str12="};";QString str13="#endif";QString strH=str1+"\n"+str2+"\n"+"\n"+str3+"\n"+str4+"\n"+str5+"\n"+str6+"\n"+str7+"\n"+"\n"+str8+"\n"+str9+"\n"+str10+"\n"+str11+"\n"+str12+"\n"+str13;QByteArray strbytes=strH.toUtf8();  //转化为字节数组file.write(strbytes,strbytes.length()); //写入文件file.close();}
}void CreateQtClass::CreateCppClass(QString i_filePath, QString i_className, QString i_baseName)
{QFile file;file.setFileName(i_filePath+"/"+i_className+".cpp");if(file.open(QIODevice::WriteOnly |QIODevice::Text)){QString str1=QString("#include'%1.h'").arg(i_className);QString str2=QString("%1::%2(QWidget *parent):%3(parent)").arg(i_className).arg(i_className).arg(i_baseName);QString str3="{";QString str4="    Init()";QString str5="}";QString str6=QString("%1::~%1()").arg(i_className).arg(i_className);QString str7="{";QString str8="}";QString strCpp=str1+"\n"+str2+"\n"+str3+"\n"+str4+"\n"+str5+"\n"+str6+"\n"+str7+"\n"+"\n"+str8;QByteArray strbytes=strCpp.toUtf8();  //转化为字节数组file.write(strbytes,strbytes.length()); //写入文件file.close();}
}

运行效果图:

QT造类器(操作简单)相关推荐

  1. 【QT的音乐播放器(简单版)】

    基于QT的音乐播放器 前言 一.主体效果 二.主要技术点: 1. mp3的ID3V2格式文件解析:作者.歌手.时长.专辑图片等 1.1 需要工具: 1.2 ID3V2文件格式 1.3 mp3ID3V2 ...

  2. Qt实用技巧:使用OpenCV库的视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等...

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 需求 使用OpenCV库的视频播放器(支持播放器操作,如暂停.恢复 ...

  3. php简单的mysql类_一个简单的php mysql操作类

    本文分享一个简单的php.mysql操作类,很简单,主要是数据的连接.查询等.有需要的朋友参考下吧. 分享一段php.mysql操作类的代码,供初学的朋友参考. 一个简单的类使用php和mysql数据 ...

  4. 编写一个类,实现简单的栈(提示:用链表结构实现)。数据的操作按先进后出(FILO)的顺序。

    编写一个类,实现简单的栈(提示:用链表结构实现).数据的操作按先进后出(FILO)的顺序. 提示: 成员函数为 void queue::put(int item); //将数据item插入到栈中 in ...

  5. 操作简单的影音文件播放工具-万能播放器下载

    万能播放器是一款操作简单的影音文件播放工具,小伙伴们可以使用万能播放器播放喜欢的影音文件.万能播放器可支持p2p在线点播.边看边下.防病毒等功能.万能播放器几乎兼容市面上所有视频格式,有喜欢的小伙伴们 ...

  6. 分享3款音频分割器,操作简单

    音频分割是指将音频文件按照时间段或者大小等条件进行切割的工具,非常适用于需要将一段长时间的音频文件拆分成多个短片段的场合,比如制作铃声.音乐剪辑等情况.那大家知道分割音频的软件有哪些吗?如果你还不知道 ...

  7. 视频剪辑器都有哪些?分享几种操作简单的视频剪辑工具

    通过剪辑视频,可以将视频中的无用镜头和重复内容去掉,使得视频更加紧凑,节奏更加流畅,提高观看体验.在现今的快节奏社会,观众对于时间的精打细算,因此,视频的剪辑显得尤为重要.如果视频过于冗长,观众会感到 ...

  8. Qt 互斥锁 QMutex 的简单应用

    Qt 互斥锁 QMutex 的简单应用 在多线程解决问题中,经常会碰到多个线程操作同一片资源,有些时候用信号量的方式去处理,但有的时候需要用到互斥锁. 互斥锁:说白了就是,资源某个时间只能被一个线程使 ...

  9. Qt 串口类QSerialPort 使用笔记

    Qt 串口类QSerialPort 使用笔记 虽然现在大多数的家用PC机上已经不提供RS232接口了.但是由于RS232串口操作简单.通讯可靠,在工业领域中仍然有大量的应用.Qt以前的版本中,没有提供 ...

  10. STL中list类的自己简单实现

    前面写了STL中关于string类和vector类的简单实现,要想成体系学习的小伙伴可以看一看(48条消息) STL中vector类的自我简单实现_芜湖开冲-的博客-CSDN博客https://blo ...

最新文章

  1. HDU 5385 The path(贪心、构造、最短路径树)
  2. JS中 map, filter, some, every, forEach, for in, for of 用法总结
  3. [导入]WINRAR 命令行语法[转载]
  4. 杨辉三角_二维数组的好例子(转载)
  5. GATNE:阿里电商场景下的大规模异构网络表示学习 KDD2019
  6. 【华为云技术分享】云图说 | 初识云耀云服务器,打造“极优、极简”的云上体验
  7. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 24 章 日常数据库维护工作_24.3. 日志文件维护...
  8. indesign缩放图片被切割_indesign修改图片大小的操作流程
  9. string字符串的查找替换、模式匹配
  10. matlab2014A安装教程及下载
  11. 王招治计算机财务管理,计算机财务管理——以Excel为分析工具
  12. 最新常用会计科目表及详细解释
  13. 渗透测试实验_安装Windows 2003 企业版
  14. 【Week 7 作业】A - TT 的魔法猫、B - TT 的旅行日记、C - TT 的美梦
  15. %E6%9D%8E%E9%9B%B7是什么编码
  16. ffmpeg如何实现MP3转码g711a
  17. 求你了别秀了——Reversion Count
  18. 原谅我一直对B站有误解!
  19. 杭州电子商务研究院发布“独立站”新概念
  20. 区分数据库中的 char、varchar、nchar、nvarchar

热门文章

  1. Linux下Oracle中sqlplus上下键乱码问题
  2. c语言程序输出数字图形,C语言数组应用之图形数字的输出
  3. 输出分组_数据科学|pandas教程--分组和聚合
  4. gazebo 直接获取传感器数据_如何以最简单的方式获取传感器数据?
  5. excel保存快捷键_这应该算是Windows电脑中最强的几组快捷键!
  6. python 三维矩阵乘以二维矩阵_python 二维矩阵转三维矩阵示例
  7. 动态规划实战15 leetcode-256. Paint House
  8. StanfordDB class自学笔记 (7) SQL
  9. 泰拉瑞亚服务器存档位置,泰拉瑞亚国服存档怎么恢复 国服存档位置
  10. spring全家桶的技术体系介绍