Qt 编码规范 #
命名规范 #
类命名 #
cpp
// 类名使用大驼峰命名法
class MyCustomWidget : public QWidget
{
Q_OBJECT
};
// Qt 类都以 Q 开头
// 自定义类不要以 Q 开头
// 派生类可以体现继承关系
class MyPushButton : public QPushButton
{
};
变量命名 #
cpp
// 成员变量使用 m_ 前缀
class MyClass
{
private:
int m_value;
QString m_name;
QWidget *m_parent;
};
// 局部变量使用小驼峰
int itemCount = 10;
QString userName;
// 常量使用全大写和下划线
const int MAX_BUFFER_SIZE = 1024;
const QString DEFAULT_NAME = "Default";
// 枚举使用大驼峰
enum class Status {
Ready,
Running,
Finished
};
函数命名 #
cpp
// 函数名使用小驼峰
void calculateTotal();
QString getUserName();
// getter/setter 命名
QString name() const; // getter
void setName(const QString &name); // setter
// 布尔值 getter 使用 is/has 前缀
bool isEnabled() const;
bool hasChildren() const;
// 槽函数可以使用 on 前缀
void onButtonClicked();
void onDataReceived();
信号命名 #
cpp
signals:
// 信号使用过去式或状态变化
void clicked();
void pressed();
void released();
// 带参数的信号
void valueChanged(int newValue);
void dataReceived(const QByteArray &data);
// 避免使用 on 前缀
// void onClicked(); // 错误
代码格式 #
缩进和空格 #
cpp
// 使用 4 个空格缩进(不使用 Tab)
void MyClass::myFunction()
{
if (condition) {
doSomething();
}
}
// 大括号风格
// 函数定义:大括号另起一行
void MyClass::myFunction()
{
}
// 控制语句:大括号在同一行
if (condition) {
doSomething();
} else {
doOther();
}
// 单行语句也使用大括号
if (condition) {
return true;
}
指针和引用 #
cpp
// 指针星号靠近变量名
QWidget *widget;
int *value;
// 引用符号靠近类型
void setData(const QString &data);
QString &name();
头文件顺序 #
cpp
// myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H
// 1. Qt 头文件
#include <QWidget>
#include <QString>
// 2. 第三方库头文件
#include <opencv2/opencv.hpp>
// 3. 项目头文件
#include "myotherclass.h"
// 前向声明
class QTimer;
class MyClass : public QWidget
{
Q_OBJECT
// ...
};
#endif // MYCLASS_H
最佳实践 #
使用 Qt 类型 #
cpp
// 使用 Qt 类型代替标准库类型
QStringList list; // 而非 std::vector<std::string>
QList<int> values; // 而非 std::vector<int>
QMap<QString, int> map; // 而非 std::map
// 使用 Qt 整数类型
qint32 value; // 保证 32 位
qint64 bigValue; // 保证 64 位
内存管理 #
cpp
// 使用对象树管理内存
QWidget *window = new QWidget;
QPushButton *button = new QPushButton("Click", window); // 自动删除
// 使用智能指针
QSharedPointer<MyClass> ptr = QSharedPointer<MyClass>::create();
// 使用 QPointer 避免悬空指针
QPointer<QWidget> widget = new QWidget;
if (widget) {
widget->show();
}
信号槽连接 #
cpp
// 使用新式语法(编译时检查)
connect(button, &QPushButton::clicked, this, &MyClass::onButtonClicked);
// 使用 Lambda
connect(button, &QPushButton::clicked, [this]() {
qDebug() << "Button clicked";
});
// 避免旧式语法
// connect(button, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
下一步 #
现在你已经掌握了编码规范,接下来学习 内存管理,深入了解 Qt 的内存管理机制!
最后更新:2026-03-29