qt编码规范

一.概述
     良好的编程规范可以大幅提高一个程序的可读性、可理解性和可维护性。
本规范参考Effective C++中文版、Google C++编码规范及Qt编码风格。

二.头文件

1)#define保护
    所有头文件都应该使用#define防止头文件被多重包含,命名格式为:<ProjectName>_<FileName>_H,例如:
	
#ifndef MAP_MAINWINDOW_H
#define MAP_MAINWINDOW_H
……
#endif //MAP_MAINWINDOW_H

2)头文件依赖
    使用前声明,尽量减少.h文件中#include的数量。
	
3)头文件包含次序
    将包含次序标准化可增强可读性,次序如下:C库头文件、C++库头文件、其他库的头文件、项目内的头文件。
	
三.命名约定

1)通用命名约定
    避免使用缩写。
	
2)文件命名
    文件名全部小写,可以包含下划线,
	例如:
		my_test_class.h
		my_test_class.cpp
		mytestclass.h
		mytestclass.cpp

3)类命名
    类名是名词,每个单词以大写字母开头,不包含下划线,且名前加大写字母C,
	例如:
	CMySystemWatcher
	CClockBattery
	
4)变量命名
    变量名是名词,首单词以小写字母开头,后续单词以大写字母开头。每行一个变量,单字符的变量只在临时变量或循环计数中使用。
    类成员变量需在变量名前加m_前缀,
	例如:
	int m_myValue;
    局部变量等到需要使用时再定义变量,且定义时必须初始化,整数用0,实数用0.0,指针用NULL,字符(串)用'\0'。
    例如:
    int myValue=0;
    尽量不要使用全局变量,以降低耦合。若使用能带来极大便利,命名时需在变量前加g_前缀,
	例如:
	int g_myValue;
	
5)常量命名
    常量不含前缀且应该大写,单词间有下划线,包括全局常量和宏定义,
	例如:
	const int MY_VALUE=0;
	#define MY_VALUE 0
	
6)函数命名
	函数名是动词或含有动词的短语,首单词以小写字母开头,后续单词以大写字母开头,
	例如:
	int getMyValue();
	int setMyeValue(int value)
	函数参数所有字母小写,单词间有下划线,若为非基本数据类型,使用const引用,
	例如:
	setColor(const QColor & new_color)
	
7)枚举命名
    枚举名和枚举值都是名词,每个单词以大写字母开头,且第一个单词是Enum,
	例如:
	enum EnumMyColor //枚举名
	{
	EnumWhite,     //枚举值
	EnumBlack
	};
	
8)命名空间
	命名空间的名称是名词,每个单词以大写字母开头,且前两个单词是BaiDi,
	例如:
	namespace BaoDiProject{ }
	
9)结构体命名
	结构体中只定义变量,不定义函数。
	结构体名是名词,每个单词以大写字母开头。
	结构体成员名词,首单词以小写字母开头,后续单词以大写字母开头。例如:
	struct MyColor
	{
		boolisMyColor;
		int white;
	};
	
四.代码注释

1)注释风格
	使用//或/**/,统一就行。一般情况下,源程序有效注释量必须在20%以上,不易理解的地方都需加上注释,注释不宜太多也不能太少。
	
2)类注释
	类的头文件顶部需添加说明性注释,包括版权说明、版本号、作者、生成日期、类的功能描述等。
	/*****************************************************
	**Copyright(C), 2015-2025, Baodi Technology.
	**Version:
	**Author:            
	**Date:
	**Description://类用途描述    
	*****************************************************/
	
3)函数注释
	重要函数头部应该进行注释,包括函数名、函数功能描述、输入参数、输出参数、返回值及其他。
	/*************************************************
	**Function:        // 函数名称
	**Description:    // 函数功能描述
	**Input:          // 输入参数说明,包括每个参数的作用、取值说明
	**Output:         // 对输出参数的说明
	**Return:         // 函数返回值的说明
	**Others:         // 其它说明
	*************************************************/
	
4)变量注释
	通常变量名本身足以说明变量用途,特定情况下,需要额外注释说明。变量注释位于变量上方,例如:
	//keepstrack of the total number of entries in the table
	int  totalNumber;
	
5)实现注释
	对于实现代码中巧妙的、晦涩的、重要的地方加以注释。
	出彩或复杂的代码块上方要加以注释,例如:
	// Divide result by two, taking into account that x
	// contains the carry from the add.
	for(int i=0;i<100;i++)
	{
	x=(x<<8)+(*result)[i];
	(*result)=x>>1;
	x&=1;
	}
	比较晦涩的地方可在行尾,代码之后空两格加注释,例如:
	if(……)
	{
		……
	   return;  //return while meetingthe conditions
	}
	
6)TODO注释
	计划中但未完成的代码使用TODO注释,例如:
	void CMyClass::function()
	{
		//TODO
	}
	
五.代码排版

1)行长度
	较长的语句(>80字符)要分成多行书写,长表达式要在较低优先级操作符处划分新行,操作符放在新行之首,逗号放在一行的结束,划分出的新行要进行适当的缩进,使排版整齐,语句可读,例如:
	if ((taskOne < taskNumber)&&(taskTwo < taskNumber)
	&&(taskThree< taskNumber))
	{
			 ……
	}
	
2)缩进
	使用4个空格进行代码缩进,不要用Tab键。但是对于由开发工具自动生成的代码可以有不一致。
	预处理指令不要缩进,从顶格开始,例如:
	if(isActive())
	{
	#if DISASTER_PENDING
		dropEverything();
	#endif
		backToNormal();
	}
	
3)空行
	空行可将语句进行适当的分组,便于阅读,在相对独立的代码块之间必须加一行空行。
	
4)大括号
	大括号永远单独占一行,不跟在语句后面。如果控制语句(if、while、for、switch)体为空或者只有一行,也要使用大括号,例如:
	if ( address.isEmpty( ) )
	{
	return false;
	}
	switch(value)
	{
		case 0:
	{
		get Electricity();
		break;
	}
	default:
	{
		 break;
	}
	}
	
5)圆括号
	使用圆括号将表达式分组,即使运算符的优先级相同,也要用圆括号进行分组,例如:
	if ( ( a && b) | | c)
	
六.重要原则
	正确性>稳定性>可测试性>可读性>全局效率>局部效率>个人习惯
	a)      正确性,指程序要实现设计要求的功能;
	b)     稳定性、安全性,指程序稳定、可靠、安全;
	c)      可测试性,指程序要具有良好的可测试性;
	d)     规范/可读性,指程序书写风格、命名规则等要符合规范;
	e)      全局效率,指软件系统的整体效率;
	f)       局部效率,指某个模块/子模块/函数的本身效率;
	g)      个人表达方式/个人方便性,指个人编程习惯。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Qt面试中,coding环节通常是测试应聘者Qt编程技能和经验的重要部分。对于Qt面试的coding部分,可能会涉及以下几个方面: 1. Qt基础知识:应聘者需要掌握Qt的基本概念和常用类,了解Qt的对象模型和信号槽机制。可能会出现一些关于Qt类的使用和常见操作的问题。 2. UI设计与开发:这部分可能会要求应聘者根据一些需求或UI设计稿实现一个界面。应聘者需要使用Qt的UI设计工具,例如Qt Designer,完成界面的设计和布局,并用C++代码实现界面的功能。 3. 数据处理与算法:有时候面试官会出一些与数据处理或算法有关的问题,以考察应聘者对Qt的灵活运用能力。例如,要求实现一个基于Qt的文本编辑器,或者对一组数据进行排序等。 4. 多线程编程:对于需要处理并发或耗时操作的问题,可能会考察应聘者的多线程编程能力。这包括使用Qt提供的多线程类或库函数,以及保证线程安全性和避免资源竞争的经验。 5. 调试与问题解决能力:面试过程中可能会有意设置一些错误或问题,观察应聘者的调试和解决问题的能力。应聘者需要能够熟练使用Qt的调试工具,查找和修复代码中的问题和错误。 在Qt面试的coding环节中,关键是熟练掌握Qt的基本特性和常用类,以及对数据处理、UI设计、多线程和问题解决的经验和能力。同时,良好的编码风格和规范也是考察的一项重点。通过练习和实际项目的积累,不断提升自己的Qt编程技能,才能在Qt面试中有较好的表现。 ### 回答2: QT面试coding主要是针对QT编程技能的考察。在QT面试coding过程中,通常会给出一些编程问题或者需要完成一些编程任务。 首先,面试官可能会问一些基础的QT问题,例如QT的信号与槽机制、布局管理器、窗口部件等等。回答这些问题需要我们对QT的相关概念有一定的了解和掌握。 其次,面试官可能会给出一些具体的编程问题,要求我们使用QT进行解答。这些问题可能涉及到QT的各种功能和模块,例如窗口的绘制、界面的响应事件、文件的读写等。在解答这些问题时,我们需要灵活运用QT的相关函数和类进行编程实现。 最后,面试官可能会要求我们完成一些编程任务,例如实现一个简单的QT应用程序、设计一个界面等等。在这些任务中,我们需要运用QT的各种功能和UI设计技巧来完成。 总的来说,QT面试coding主要考察我们对QT编程的熟练程度和实际应用能力。我们需要熟悉QT的相关知识,并能够灵活运用QT进行编程。通过在面试中展示我们的编程能力,我们能够更好地展现自己的优势,提高获得工作机会的几率。 ### 回答3: 在qt面试的coding环节中,通常会要求应聘者完成一个具体的编程任务来评估其在qt开发方面的能力。 首先,面试官可能会询问应聘者是否有qt编程经验以及相关项目经验。这些问题旨在了解应聘者是否熟悉qt框架,是否能够独立开发qt应用程序,并根据具体需求进行调试和优化。 接下来,面试官可能会给应聘者一个具体的编程问题,要求应聘者使用qt编写代码解决该问题。这个问题可能涉及到窗口和控件的创建、布局、信号与槽的连接、界面交互等方面。 在解决问题的过程中,应聘者需要熟悉qt的基本概念和常用的类,比如QWidget、QBoxLayout、QPushButton、QLineEdit等。同时,还需要掌握qt的常用功能,比如事件处理、界面设计和绘图等。 应聘者需要根据问题的要求编写代码,并确保代码的可读性、可维护性和效率。在编程过程中,应聘者需要熟练运用qt的API,同时遵循良好的编码规范,确保代码的质量。 此外,应聘者还可以采取一些额外的措施来提高代码的质量和可扩展性,比如使用设计模式、封装可复用的代码、添加注释和文档等。 最后,面试官可能会与应聘者讨论和评价其代码的质量和实现细节。这个过程中,应聘者需要清楚地解释和展示自己的代码实现,并回答面试官的问题和疑问。 在qt面试的coding环节中,关键是理解问题、熟练使用qt的API和功能,并能够用清晰、简洁、高效的代码解决问题。同时,代码的可读性和可维护性也是重要的考察因素。通过合理的思考和实现,展示自己在qt开发方面的能力和经验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qtc++开发者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值