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