Qt5.15.2 C++ 在一个 .h 头文件中定义多个类

24 01月
作者:cinjep|分类:应用笔记|标签:Qt5.15.2 C++

MyClasses.h

#ifndef MYCLASSES_H
#define MYCLASSES_H

#include <QObject>
#include <QString>

// 第一个类:继承自 QObject,使用 Q_OBJECT 宏
class MyClassA : public QObject
{
    Q_OBJECT

public:
    explicit MyClassA(QObject *parent = nullptr);
    QString getName() const;

public slots:
    void setName(const QString &name);

signals:
    void nameChanged(const QString &newName);

private:
    QString m_name;
};

// 第二个类:普通 C++ 类(不继承 QObject)
class MyClassB
{
public:
    MyClassB(int value = 0);
    int getValue() const;
    void setValue(int value);

private:
    int m_value;
};

// 第三个类:另一个 QObject 子类
class MyClassC : public QObject
{
    Q_OBJECT

public:
    explicit MyClassC(QObject *parent = nullptr);
    void doSomething();

signals:
    void somethingDone();
};

#endif // MYCLASSES_H


MyClasses.cpp

#include "MyClasses.h"
#include <QDebug>

// MyClassA 实现
MyClassA::MyClassA(QObject *parent)
    : QObject(parent), m_name("Default")
{
}

QString MyClassA::getName() const
{
    return m_name;
}

void MyClassA::setName(const QString &name)
{
    if (m_name != name) {
        m_name = name;
        emit nameChanged(m_name);
    }
}

// MyClassB 实现
MyClassB::MyClassB(int value)
    : m_value(value)
{
}

int MyClassB::getValue() const
{
    return m_value;
}

void MyClassB::setValue(int value)
{
    m_value = value;
}

// MyClassC 实现
MyClassC::MyClassC(QObject *parent)
    : QObject(parent)
{
}

void MyClassC::doSomething()
{
    qDebug() << "Doing something...";
    emit somethingDone();
}


注意事项:

  1. 每个使用 Q_OBJECT 宏的类

    • 必须继承自 QObject(直接或间接)。

    • 必须单独声明,不能嵌套在其他类内部(除非是嵌套但不使用信号/槽)。

    • 需要被 MOC(Meta-Object Compiler)处理。Qt 的构建系统(qmake 或 CMake)会自动处理包含 Q_OBJECT 的头文件。

  2. 头文件防护(Include Guards)

    • 使用 #ifndef / #define / #endif 防止重复包含。

    • 也可以用 #pragma once(大多数现代编译器支持),但在跨平台项目中传统写法更稳妥。

  3. 命名规范

    • 类名应清晰、唯一,避免冲突。

    • 如果类之间关系紧密(如一个主类 + 若干辅助类),放在一起是合理的;否则建议拆分到不同文件以提高可维护性。

  4. MOC 兼容性

    • 所有带 Q_OBJECT 的类必须在头文件中定义(不能只在 .cpp 中),因为 MOC 需要解析头文件。


浏览47
返回
目录
返回
首页
Qt中QSettings类读取INI配置文件 Qt5.15.2 C++ 使用 UDP 发送 Wake-on-LAN(WOL)魔术包唤醒远端计算机