Qt代码风格

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语句

  • case与switch位于同一列;
  • 每个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_Style

本文分享自微信公众号 - Qt君(qtjuna)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 总结if/elif/else/endif宏之间的嵌套关系

    Qt君
  • C语言中的双重否定

      下列代码的目的是「将"分支转移"的信息提供给编译器,这样可以让编译器对其代码进行优化,以减少指令跳转带来的性能下降」。 __builtin_expect的...

    Qt君
  • 使用python批量编译Qt工程脚本

    Qt君
  • 【趣解编程】条件语句if

    遇见if,就是走到了分岔路口,需要根据当前拥有的条件和环境,来决断到底要走哪一条路。

    一斤代码
  • R条件语句

    但如果你有一长串 if 语句,那么就要考虑重写了。重写的一种方法是使用 switch() 函数, 它先对第一个参数求值,然后按照名称或位置在后面的参数列表中匹...

    生信编程日常
  • R语言写2048游戏

           2048 是一款益智游戏,只需要用方向键让两两相同的数字碰撞就会诞生一个翻倍的数字,初始数字由 2 或者 4 构成,直到游戏界面全部被填满,游戏结...

    用户1680321
  • 为什么用 if(0 == x) 而不是 if(x == 0) ?

    大家好,今天跟大伙分享一个编程小技巧方面的知识:标题已经给出了,为什么有的人更愿意用 if ( 0 == x)而不是 if(x == 0)?

    7089bAt@PowerLi
  • if判断与比较操作符gt、lt、eq等的使用

    PS:使用if判断时,需要在判断结束处填入"fi",表示if语句块的结束 例如: if [ $ACTION = "add"] then .....

    张诺谦
  • LeetCode Longest Palindromic Substring

    Given a string s, find the longest palindromic substring in s. You may assume th...

  • 终于让采集侠自动采集了

    用织梦采集侠一段时间了,觉得这个插件真的不错,尤其是新版本,可以结合DEDE自动的采集规则来进行采集。一下采集功能就非常强大了。

    用户1191760

扫码关注云+社区

领取腾讯云代金券