QT学习之个人编程规范

每个人对语言的编程习惯都不一样,这里简单介绍一下自己在学习使用Qt时养成的编程习惯,仅供参考。

1、命名规则

1.1 常规命名规则

1.1.1 类命名规则
适用对象:
(1)窗口控件实现类(所有之间或间接继承于QWidget类的实现类)

规则:命名以V 开头
示例:VTestWidget

(2)其他类

规则:命名以C开头
示例:CTestDialog

(3)所有类

规则:除开头文字外,第二个字母也需要大写,命名遵循驼峰命名法
示例:参照其他类的示例

1.1.2 函数命名规则(一般为类内)
(1)类内普通函数

规则:适用驼峰法,首字母小写
示例:initTestWidget()

(2)自定义的信号

规则:一般以**signal_**为前缀
示例:signal_btnTest_clicked();

(3)自定义响应槽

规则:一般以**slot_**为前缀
示例:slot_btnTest_clicked();

(4)自动响应槽(Qt自动连接槽)

规则:以on_ + 对象名_ + 信号名
示例:ui中命名为btnAdd的QPushButton点击信号,自动响应槽应该命名为on_btnAdd_clicked();

(5)所有函数共用命名规则(个人不喜欢用的命名规则,感觉代码写出来后期不好维护)

规则:除前缀外不能使用下划线_,其他命名都可以都不会报错

:自定义的信号使用特殊命名主要为和 Qt 自带的信号槽区分。自定义的信号一般不要使用自动连接(on_对象名_信号名)

1.1.3 变量命名规则(一般为类内)
(1)类成员变量

规则:普通成员以m_ 为前缀,静态成员以ms_ 为前缀
注:
int类型以m_i为前缀
long类型以m_l为前缀
long long类型以m_ll为前缀
QString类型以m_s为前缀
bool类型以m_b为前缀
QStringList类型以m_slt为前缀
QList类型以m_lst为前缀
指针类型为m_p为前缀等

示例:int m_iTest、long m_lTest、long long m_llTest、QString m_sTest、bool m_bTest、CTestDialog *m_pTestDialog等

(2)静态变量(static)、全局变量(global)

规则:以s、g加下划线为前缀
示例:s_nTest、g_pLoader、gs_TestStatus

(3)所有变量共用命名规则

规则:驼峰法命名,除前缀外首字母小写,使用单独的字母作为首字母;除前缀外不允许使用下划线
示例:nCount、pAppLoader、m_nCount、s_iLooker,只要不以下划线为首,其他的没有特定规则,全凭个人喜好来命名。

1.1.4 常量命名规则
所有常量

规则:全部使用大写,单词之间使用下划线分割;开头要注明常量类型
示例:NUM_TIMER_INTERVAL、STR_APP_NAME

ui界面对象命名规则

ui界面中每个控件都有一个对象名,这个名字在代码中设置数据时可能会用到,而且名字在贴图的样式表中经常用到。创建一个控件后,个人喜欢按照一定的命名规则对其进行命名,方便后期使用。

控件命名规则:
控件类型命名规则命名示例
所有控件使用驼峰命名法,不允许有下划线,开头使用标志类型短语
Widgetw开头wMainContainerName
Framefrm开头frmMainContainerName
Push Button、Tool Button、Command Link Buttonbtn开头btnTestName
Check Boxcb开头cbTestName
Radio Buttonrbtn开头rbtnTestName
Dialog Button Boxbtnbx开头btnbxConfirmName
List Widget、List Viewlst开头lstTestName
Tree Widget 、Tree Viewtr开头trTestName
Table Widget、Table Viewtb开头tbTestName
Columncol开头colTestName
Group Boxgb开头gbTestName
Tab Widgettbw开头tbwTestName
Stacked Widgetstkw开头stkwTestName
Tool Boxtlb开头tlbTestName
Combo Box、Font Combo Boxcmb开头cmbTestName
Line Edit、Text Edit、Plain Text Edit、Text Browseredt开头edtTestName
Spin Box、Double Spin Boxspb开头spbTestName
Time Edit、Date Edit、Date/Time Edittm开头tmTestName
scroll bar,、Slidersld开头sldTestName
Labellbl开头lblTestName
Graphic Viewgpv开头gpvTestName
Progress Barpb开头pbTestName

其他:

  1. Layout 和 Spacer 无需特殊命名,一般使用默认名字即可
  2. 列表中未列出的控件,可以根据实际情况按照第一条规则(所有规则)自己命名即可

2、基本编码规则

2.1 数据和显示分开
程序储存数据的结构要单独设计,不允许将数据直接以类似列表的方式存储在窗口或者
控件类中

2.2 注意封装
(1)数据以及窗体类成员变量不应设计为 public,应设计访问方法供他人访问;复杂的数据
处理过程应设计数据管理类进行处理
(2)简单的数据结果可设计成结构体
(3)尽量不使用全局变量,以成员变量代替

2.3 窗体布局工作通过 UI 文件实现,尽量不用代码

2.4 设计 UI 类结构时遵照从顶层窗口向下的原则,注意拆分,单个 UI 类中不应处理多个业
务逻辑

2.5 注意资源的分配和释放,原则为谁分配谁释放

2.6 ui设计中如果没有必要,尽量使用QPlain Text Edit替代QText Edit控件

3、类函数编程习惯(个人)

3.1 函数一般头文件中,喜欢一开始写上注释模板,表明该函数有什么作用
如下模板

/*!
* @file vconfattendeeitemframe.h	文件类名
* @brief 会议页面组成人员控件		该函数所起作用的注释
* @author dong				类文件编写人
* @version 1.0				版本号
* @date 2021/09/12			类创建日期
* @copyright 版权所有(c)...,保留所有权利。	版权所有权
*/

3.2 一般使用QT Creator创建的文件都是使用#ifndef来避难文件重包含的。而使用visual studio编译器加上Qt插件一般是默认是#pragma once。个人喜欢使用#ifndef,其中各有优缺点,自己按习惯就好。

3.3 一般使用创建ui界面时,个人喜欢将ui转变为ui指针进行使用,在析构函数中进行删除即可。

3.4 喜欢将头文件中创建的函数进行分类和注释。
一般顺序为为public、protected、private、signals、private slots

所有示例如下(头文件.h)

/*!
* @file vconferencenoticeframe.h
* @brief 发送会议通知页面
* @author dong
* @version 1.0
* @date 2021/09/07
* @copyright 版权所有(c)。
*/

#ifndef _VCONFERENCENOTICEFRAME_H
#define _VCONFERENCENOTICEFRAME_H

#include <QFrame>
#include "ui_vconferencenoticeframe.h"

class VConferenceNoticeFrame : public QFrame
{
    Q_OBJECT
public:
    VConferenceNoticeFrame(QWidget *parent = Q_NULLPTR);
    ~VConferenceNoticeFrame();
    
public:		// 外部调用接口函数
    /*! VConferenceNoticeFrame::updateItem
    * @brief 更新数据
    * @param sGroupID 群组ID
    * @param sGroupName 群组名
    * @param sltGroupMember 群组成员
    */
    void updateItem(QString sGroupID, QString sGroupName, QStringList sltGroupMember);
    
private:	// 类中调用函数
    /*! VConferenceNoticeFrame::initControl
    * @brief 初始化类内基础数据
    */
    void initControl();

signals:	// 触发信号
    /*! VConferenceNoticeFrame::signal_btnNoticeOK_clicked
    * @brief 跳转到页面信息显示界面信号
    */
    void signal_btnNoticeOK_clicked();
    
private slots:	// 响应槽
    /*! VConferenceNoticeFrame::on_btnNoticeOK_clicked
    * @brief 确定按钮响应槽
    * @param checked 是否按下
    */
    void on_btnNoticeOK_clicked(bool checked);
 
private:        // 数据成员
    Ui::VConferenceNoticeFrame *ui;
    QPushButton *m_pBtnAdd;
    QString m_sGroupID;     // 群组ID
};
#endif // !_VCONFERENCENOTICEFRAME_H

4、其他规则

3.1 程序界面贴图通过样式表完成,不能硬编码在代码或 Ui 文件里
3.2 资源文件(样式表和图片等)应该设计为动态编译和加载
3.3 程序运行时配置信息数据应集中保存和处理
3.4 单个项目的源代码根据功能模块拆分存放在不同的目录里,在 VS 工程中按照目录建立
包进行管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值