首先说明一下写这个的原因(很多人疑惑,不是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_OBJECT
public:
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();
}
}
运行效果图: