# fvslit **Repository Path**: laizx/fvslit ## Basic Information - **Project Name**: fvslit - **Description**: No description available - **Primary Language**: C++ - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-14 - **Last Updated**: 2026-02-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ***重要提示:由于使用了视频采集卡,必须安装 CODECS 1.1.0.202.0.exe*** # 项目代码规范 参考Qt官方代码风格,并根据自己的开发习惯进行了调整。 参见:(https://zhuanlan.zhihu.com/p/82926622) ### 注释风格建议 C++ 有两种注释形式,使用 C 风格/**/或 C++ 风格//都可以,项目中统一就好。毕竟是 C++ 项目,建议还是使用 C++ 风格的//。 当然,//对代码块注释不太方便,可以适当采用/**/来快速便捷地注释代码块。 例如: ``` // @function: 获取容器迭代器 // @param : void // @return: 返回容器迭代器 // @author: created by Dablelv on 20180802 Iterator* getIterator() const; ``` ### 缩进 - 使用4个空格; - 注意:使用空格而不是制表符\(Tab按键\)。 ### 声明变量 - 在单独的行上声明每个变量; - 避免使用简短或无意义的名称\(例如"a",“rbarr”,“nughdeget”\); - 单个字符变量名称仅适用于计数器和临时变量,其中变量的目的是为了显而易见; 不恰当用法: ```cpp int a, b; char *c, *d; ``` 纠正: ```cpp int height; int width; char *nameOfThis; char *nameOfThat; ``` - 变量和函数以小写字母开头。变量名称中的每个连续单词都以大写字母开头; - 尽量避免使用缩写; 不恰当用法: ```cpp short Cntr; // 不明确的缩写 char ITEM_DELIM = ' '; ``` 纠正: ```cpp short counter; char itemDelimiter = ' '; ``` - 类始终以大写字母开头。如公共类以’Q’\(QRgb\)开头,后跟大写字母。公共函数通常以’q’\(qRgb\)开头;自定义类用大写字母'C'开头,如:CUser。 - 首字母缩略词是驼峰式\(例如QXmlStreamReader,而不是QXMLStreamReader\)。 ### 常量定义 - 常量最好集中定义在一个文件,比如:const.h中 - 常量全部大写,用下划线分隔 例: ```cpp #define MAX_DATA_LEN 2048 ``` ### 空白符 - 使用空行将语句组合在一起; - 始终只使用一个空白行; - 始终在关键字之后和大括号之前使用单个空格; 不恰当用法: ```cpp if(foo){ } ``` 纠正: ```cpp if (foo) { } ``` - 对于指针或引用,始终在类型和`*`或`&`之间使用单个空格,但在`*`或`&`与变量名称之间没有空格; ```cpp char *x; const QString &myString; const char * const y = "hello"; ``` - 用空格包围二进制运算符; - 每个逗号后留一个空格; - 转换模式的使用后没有空格; - 尽可能避免使用C风格的转换; 不恰当用法: ```cpp char* blockOfMemory = (char* ) malloc(data.size()); ``` 纠正: ```cpp char *blockOfMemory = reinterpret_cast(malloc(data.size())); ``` - 不要在同一行上放置多个语句; - 控制流语句的主体上使用一个新行; 不恰当用法: ```cpp if (foo) bar(); ``` 纠正: ```cpp if (foo) bar(); ``` ### 花括号 - 使用附加花括号的情况:左、右花括号都在语句的下一行。 不恰当用法: ```cpp if (codec) { } else { } ``` 纠正: ```cpp if (codec) { } else { } ``` - 例1:单行语句也尽量使用花括号: ```cpp if (address.isEmpty() || !isValid() || !codec) { return false; } ``` - 例2:支持对称:在if-then-else块中也使用花括号,其中if-code或else-code包含多行: 不恰当用法: ```cpp if (address.isEmpty()) qDebug("empty!"); // 这里不对称,容易造成误解 else { qDebug("%s", qPrintable(address)); it; } ``` 纠正: ```cpp if (address.isEmpty()) { qDebug("empty!"); } else { qDebug("%s", qPrintable(address)); it; } ``` 不恰当用法: ```cpp // 多级嵌套语句没花括号容易逻辑错误 if (a) … else if (b) … ``` 纠正: ```cpp if (a) { … } else { if (b) … } ``` - 当条件语句的主体为空时使用花括号 不恰当用法: ```cpp while (a); ``` 纠正: ```cpp while (a) {}; ``` ### 括号 - 使用括号对表达式进行分组: 不恰当用法: ```cpp if (a && b || c) ``` 纠正: ```cpp if ((a && b) || c) ``` 不恰当用法: ```cpp a + b & c ``` 纠正: ```cpp (a + b) & c ``` ### switch语句 - case与switch位于同一列; - 每个case必须在结尾处有一个break\(或return\)声明,例外: - 用于Q\_FALLTHROUGH\(\)表示故意不中断; - case后立刻进入下一个case。 ```cpp switch (myEnum) { case Value1: doSomething(); break; case Value2: // case后立刻进入下一个case case Value3: doSomethingElse(); Q_FALLTHROUGH(); default: defaultHandling(); break; } ``` ### 跳转语句\(break, continue, return, and goto\) - 跳转语句后不要放’else’。 不恰当做法: ```cpp if (thisOrThat) return; else somethingElse(); ``` 纠正: ```cpp if (thisOrThat) return; somethingElse(); ``` - 例外:如果代码本质上是对称的,则允许使用’else’来显示对称性。 ### 换行 - 保持一行短于100个字符并在必要时换行。 - 注释/函数说明行应保持在80列实际文本之下。调整周围的文本布局,并尝试以避免“锯齿状”段落的方式流动文本。 - 在换行后的末尾加上逗号。 - 操作符不要从新行开始。 不恰当用法: ```cpp if (longExpression + otherLongExpression + otherOtherLongExpression) { } ``` 纠正: ```cpp if (longExpression + otherLongExpression + otherOtherLongExpression) { } ``` ### 一般例外 - 如果严格遵循规则会使您的代码看起来很糟糕,请随意打破它。 - 如果任何给定模块中存在争议,则维护者对可接受的样式有最终决定权。 ref: [https://wiki.qt.io/Qt\_Coding\_Style](https://link.zhihu.com/?target=https%3A//wiki.qt.io/Qt_Coding_Style)