QtCreator类结构生成模板说明
1目的
在应用层开发中,使用QtCreator集成IDE开发代码,在开发过程中添加类时IDE会自动生成相应代码,为满足与主流c++代码规范的统一,将Qt中自动生成的代码与规范存在的差异和修改以及修改代价进行梳理,讨论在代码规范统一,额外修改代价小中快捷有效的Qt编码规范。
2类头文件说明
1:宏定义防止文件被重复引用;
2:自动包含父类头文件;
3:QT_BEGIN_NAMESPACE宏是Qt为了统一命名空间下的编译而引入。Qt自动创建一个和主类(MainWindow)名字相同,命名空间不同(主类为匿名的命名空间)的类。同时声明一个私有的ui指针,用来访问界面对象,如下图。
4:主类结构,包括Q_OBJECT宏(信号槽必须),构造函数、析构函数及指向界面对象的ui指针。
3类源文件说明
1:自动包含主类(MainWindow)和Ui::MainWindow类的头文件
2:主类构造函数,父对象,继承关系以及变量ui初始化,构造函数中执行Ui::MainWindow类中setupUi函数,进行界面初始化。
3:主类析构函数。
4与现有规范的差异及修改
4.1文件命名
要求:C++的头文件和cpp文件名和类名保持⼀致,小写蛇形命名方式。
差异:Qt自动生成小写文件名
修改:添加界面类时手动修改文件名
代价:容易
4.2防止文件被重复引用宏定义
要求:#ifndef H_类名_H
差异:Qt自动生成#ifndef 类名_H
修改:自动生成后手动修改
代价:容易
4.3防止文件被重复引用宏定义
要求:第一层统一为namespace Ui,第二层为namespace 模块命名空间。
差异:Qt将界面类自动创建一个命名空间为Ui下的界面类
修改:
a:修改自动生成的ui_类名.h中命名空间
自动生成如下图:
修改后如下图:
b:修改类头文件中与界面类相关声明
自动生成如下图:
修改后如下图:
c:修改源文件中界面类初始化位置
自动生成如下图:
修改后如下图:
d:头文件和源文件中最外层添加Ui命名空间和模块名命名空间,如下图:
e:main.cpp中为主类添加命名空间,如下图:
代价:困难
4.3初始化和类的构造
要求:显示初始化和拷贝构造、拷贝赋值、移动构造、移动复制。
差异:Qt自动生成QMainWindow类时没有explicit关键字,只有构造函数
修改:手动添加显式初始化及拷贝构造、拷贝赋值、移动构造、移动复制的delete。
代价:容易