Qt代码风格

逆变苔原
• 阅读 1660
Qt官方代码风格,可以参考一下。

缩进

  • 使用4个空格
  • 注意:使用空格而不是制表符(Tab按键)。

声明变量

  • 单独的行上声明每个变量;
  • 避免使用简短或无意义的名称(例如"a","rbarr","nughdeget");
  • 单个字符变量名称仅适用于计数器和临时变量,其中变量的目的是为了显而易见;

  不恰当用法:

int a, b;
char *c, *d;

  纠正:

int height;
int width;
char *nameOfThis;
char *nameOfThat;
  • 变量和函数以小写字母开头。变量名称中的每个连续单词都以大写字母开头;
  • 避免使用缩写;

  不恰当用法:

short Cntr;  // 不明确的缩写
char ITEM_DELIM = ' ';

  纠正:

short counter;
char itemDelimiter = ' ';
  • 类始终以大写字母开头。如公共类以'Q'(QRgb)开头,后跟大写字母。公共函数通常以'q'(qRgb)开头;
  • 首字母缩略词是驼峰式(例如QXmlStreamReader,而不是QXMLStreamReader)。

空白符

  • 使用空行将语句组合在一起;
  • 始终只使用一个空白行;
  • 始终在关键字之后和大括号之前使用单个空格;

  不恰当用法:

if(foo){
}

  纠正:

if (foo) {
}
  • 对于指针或引用,始终在类型和*之间使用单个空格,但在*与变量名称之间没有空格;
char *x;
const QString &myString;
const char * const y = "hello";
  • 用空格包围二进制运算符
  • 每个逗号后留一个空格;
  • 转换模式的使用后没有空格;
  • 尽可能避免使用C风格的转换;

  不恰当用法:

char* blockOfMemory = (char* ) malloc(data.size());

  纠正:

char *blockOfMemory = reinterpret_cast<char *>(malloc(data.size()));
  • 不要在同一行上放置多个语句;
  • 控制流语句的主体上使用一个新行;

  不恰当用法:

if (foo) bar();

  纠正:

if (foo)
    bar();

花括号

  • 使用附加花括号的情况:左花括号与语句的开头位于同一行。如果右花括号后跟另一个关键字,它也会进入同一行;

  不恰当用法:

if (codec)
{
}
else
{
}

  纠正:

if (codec) {
} else {
}
  • 例外情况:函数实现(但不是lambda)和类声明总是在行的开头有左括号;
static void foo(int g)
{
    qDebug("foo: %i", g);
}

class Moo
{
};
  • 仅当条件语句的主体包含多行时才使用花括号:

  不恰当用法:

if (address.isEmpty()) {
    return false;
}

for (int i = 0; i < 10; ++i) {
    qDebug("%i", i);
}

  纠正:

if (address.isEmpty())
    return false;

for (int i = 0; i < 10; ++i)
    qDebug("%i", i);
  • 例外1:如果父条件语句包含多行或换行,也可以使用花括号:
if (address.isEmpty() || !isValid()
    || !codec) {
    return false;
}
  • 例外2:支持对称:在if-then-else块中也使用花括号,其中if-code或else-code包含多行:

  不恰当用法:

if (address.isEmpty())
    qDebug("empty!"); // 这里不对称,容易造成误解
else {
    qDebug("%s", qPrintable(address));
    it;
}

  纠正:

if (address.isEmpty()) {
    qDebug("empty!");
} else {
    qDebug("%s", qPrintable(address));
    it;
}

  不恰当用法:

// 多级嵌套语句没花括号容易逻辑错误
if (a)
    …
else
    if (b)
        …

  纠正:

if (a) {
    …
} else {
    if (b)
        …
 }
  • 当条件语句的主体为空时使用花括号

  不恰当用法:

while (a);

  纠正:

while (a) {}

括号

  • 使用括号对表达式进行分组:

  不恰当用法:

if (a && b || c)

  纠正:

if ((a && b) || c)

  不恰当用法:

a + b & c

  纠正:

(a + b) & c

switch语句

  • caseswitch位于同一列;
  • 每个case必须在结尾处有一个break(或return)声明,例外:

    • 用于Q_FALLTHROUGH()表示故意不中断;
    • case后立刻进入下一个case。
switch (myEnum) {
case Value1:
  doSomething();
  break;
case Value2: // case后立刻进入下一个case
case Value3:
  doSomethingElse();
  Q_FALLTHROUGH();
default:
  defaultHandling();
  break;
}

跳转语句(break, continue, return, and goto)

  • 跳转语句后不要放'else'。

      不恰当做法:

if (thisOrThat)
    return;
else
    somethingElse();

  纠正:

if (thisOrThat)
   return;
somethingElse();
  • 例外:如果代码本质上是对称的,则允许使用'else'来显示对称性。

换行

  • 保持一行短于100个字符并在必要时换行。
  • 注释/函数说明行应保持在80列实际文本之下。调整周围的文本布局,并尝试以避免“锯齿状”段落的方式流动文本。
  • 在换行后的末尾加上逗号;
  • 操作符从新行开始。如果编辑器太窄,则很容易忽略行尾的操作符。

  不恰当用法:

if (longExpression +
    otherLongExpression +
    otherOtherLongExpression) {
}

  纠正:

if (longExpression
    + otherLongExpression
    + otherOtherLongExpression) {
}

一般例外

  • 如果严格遵循规则会使您的代码看起来很糟糕,请随意打破它。
  • 如果任何给定模块中存在争议,则维护者对可接受的样式有最终决定权。

ref: https://wiki.qt.io/Qt_Coding_...

点赞
收藏
评论区
推荐文章
似梦清欢 似梦清欢
4年前
Linux shell(2)
1.变量以固定名称存放的可能变化的值,可以提高脚本的适应能力,方便脚本执行中重复使用某个值。定义/赋值变量格式为:变量名变量值注意事项:若指定变量已存在,则相当于重新给变量赋值;等号两边无空格;变量名区分大小写;变量名不能以数字开头,不使用关键字和特殊字符。root@localhostX1//定义变量
Souleigh ✨ Souleigh ✨
4年前
JS - 关于一些代码规范
代码规范源文件强制JavaScript源文件必须以无BOM的UTF8编码。缩进强制必须采用4个空格缩进,不允许以Tab制表符或2个空格代替。强制switch中的case和default必须保持缩进。//正例switch(variable)case'1'://do...break
小嫌 小嫌
4年前
Javascript中的变量提升
定义JavaScript中奇怪的一点是你可以在变量和函数声明之前使用它们。就好像是变量声明和函数声明被提升了代码的顶部一样。sayHi()//Hithere!functionsayHi()console.log('Hithere!')name'JohnDoe'console.log(name)//JohnDoevarn
Jacquelyn38 Jacquelyn38
4年前
重学JavaScript第1集|变量提升
变量提升就好比JavaScript引擎用一个很小的代码起重机将所有var声明和function函数声明都举起到所属作用域(所谓作用域,指的是可访问变量和函数的区域)的最高处。这句话的意思是:如果在函数体外定义函数或使用var声明变量。则变量和函数的作用域会提升到整个代码的最高处,此时任何地方访问这个变量和调用这个函数都不会报错;而在函数体内定义函数或使用va
Stella981 Stella981
4年前
Sass 变量的声明与使用
本节我们学习Sass中的变量,那么什么是变量呢?Sass中的变量可以用来存储一些信息,并且重复使用。变量可以存储的信息包括字符串、数字、布尔值、颜色值等等。声明变量Sass中声明变量需要用到$符号,格式为:$变量名:变量值;示例:例如下面我们定义一个变量,并给这个变量赋了一个颜色
Stella981 Stella981
4年前
Rust学习笔记#2:变量声明、绑定与引用
!(https://oscimg.oschina.net/oscnet/up2a26b061f3ae6214fc3a12b58a2ad0e8433.JPEG)变量声明基础知识Rust中的变量分局部变量和全局变量两种,且必须先声明后使用,常见的声明语法为://声明局部变量,使用let关键字letva
Wesley13 Wesley13
4年前
VBA变量(七)
变量是一个指定的内存位置,用于保存脚本执行过程中可以更改的值。以下是命名变量的基本规则。变量名称必须使用一个字母作为第一个字符。变量名称不能使用空格,句点(.),感叹号(!)或字符@,&,$,。变量名称的长度不能超过255个字符。不能使用VisualBasic保留关键字作为变量名称。
Wesley13 Wesley13
4年前
PEP
代码布局缩进每个缩进级别使用4个空格。延续线应使用Python的隐含线连接在括号,括号和大括号内,或使用悬挂缩进\7\,垂直对齐包装元素。使用悬挂式凹痕时,应考虑以下因素;第一行应该没有参数,应该使用进一步的缩进来明确区分自己作为延续线。对:#与开口分隔符对齐。foolong\_function\_name
Stella981 Stella981
4年前
PEP8 Python 编码规范
PEP8Python编码规范一代码编排1缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。2每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。3类和toplevel函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其
Stella981 Stella981
4年前
JavaScript声明提升
JavaScript声明提升声明提升就好像把声明(变量声明和函数声明)从它们所在代码中出现的位置移到了最上面。直觉上我们会以为JavaScript代码是由上到下一行一行执行的,但实际上这并不完全正确,还要考虑声明提升的存在。题目1:vara99;//全局变量af();
小万哥 小万哥
2年前
C 语言数组教程:定义、访问、修改、循环遍历及多维数组解析
C数组数组用于将多个值存储在单个变量中,而不是为每个值声明单独的变量。要创建数组,请定义数据类型(例如int)并指定数组名称,后面跟着方括号。要将值插入其中,请使用逗号分隔的列表,并在花括号内使用:cintmyNumbers25,50,75,100