QT造类器(操作简单)

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

运行效果图:
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加油吧,小杜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值