QObject 是 Qt 框架的根基类(基类),Qt 里几乎所有东西(窗口、按钮、定时器、线程、网络等)都是它的"子孙"。
它的核心作用就是提供 Qt 最核心的四大特性:对象树、信号槽、属性系统、事件系统。
一、QObject 是什么?
- 全称: Qt Object
- 位置: #include
- 地位:Qt 世界的"上帝类"
- 特点:不能被拷贝(没有拷贝构造函数),只能用指针管理。
二、QObject 的 4 大核心作用(必须懂)
1. 构建「对象树」(自动内存管理)
这是你刚才问的。
- 只要继承 QObject,就能 setParent() 。
- 父死,子必亡。
- 作用:杜绝内存泄漏,不用手动 delete 按钮、窗口。
2. 「信号与槽」(Qt 灵魂)
这是 Qt 最牛的功能,只有 QObject 才有。
- 信号(Signal):按钮被点击 clicked()
- 槽(Slot):你写的处理函数
- 作用:解耦,模块之间不用直接调用,发个信号就行。
3. 「事件处理」
- 鼠标、键盘、定时器、绘制等所有事件,都由 QObject 分发。
- 作用:统一处理用户交互。
4. 「属性系统」
- 可以动态给对象加属性( setProperty )。
- 配合 Qt 样式表(QSS)修改控件样式。
三、谁继承了 QObject?(万物皆对象)
只要你在 Qt 里见到的带 Q 开头的类,99% 都是它的子类:
- 界面类: QWidget , QPushButton , QLabel , QMainWindow
- 功能类: QTimer , QThread , QTcpSocket , QFile
四、一句话总结
QObject = Qt 的底层发动机
没有它,就没有自动释放内存、信号槽通信、事件响应 。
你写的每一个窗口、按钮,本质上都是一个 QObject。