IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> QT学习之个人编程规范 -> 正文阅读

[C++知识库]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 工程中按照目录建立
包进行管理

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章           查看所有文章
加:2021-10-09 16:05:38  更:2021-10-09 16:08:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 22:24:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码