
书: https://pan.baidu.com/s/1A6ZLSPMbCiZ-L4eRucUvXQ?pwd=kt7i
一、Qt框架基础
- “Qt的核心是元对象系统(Meta-Object System),通过
moc
(元对象编译器)实现信号槽、反射等特性。” - “
QObject
是所有Qt类的基类,提供对象树管理(父对象销毁时自动析构子对象)和内存回收机制。” - “
Q_OBJECT
宏必须出现在类声明的私有区,用于启用信号槽和动态属性等特性。”
二、信号与槽机制
- “信号槽是Qt的事件通信机制,通过
connect
绑定,支持一对多、多对一连接,线程安全。” - “
emit
触发信号时,槽函数执行方式取决于连接类型:Qt::AutoConnection
(自动判断线程上下文)。” - “Lambda表达式可作为槽函数,简化代码:
connect(btn, &QPushButton::clicked, []{ qDebug() << "Clicked"; });
”
三、GUI设计与控件
- “
QWidget
是可视化组件的基类,QMainWindow
提供主窗口框架(菜单栏、状态栏、工具栏等)。” - “布局管理器(
QHBoxLayout
、QVBoxLayout
、QGridLayout
)自动调整控件位置,避免绝对坐标。” - “样式表(QSS)通过CSS语法定制控件外观,如
QPushButton { color: red; }
。”
四、模型/视图编程
- “MVC模式在Qt中简化为模型/视图架构,
QStandardItemModel
+QTableView
实现表格数据展示与编辑。” - “自定义模型需继承
QAbstractItemModel
,重写data()
和setData()
等方法。”
五、文件与网络
- “
QFile
读写文件,QTextStream
处理文本编码,QDataStream
序列化二进制数据。” - “网络请求使用
QNetworkAccessManager
,异步处理HTTP响应,避免阻塞UI线程。”
六、多线程与并发
- “
QThread
的正确用法是继承并重写run()
方法,或使用moveToThread
将对象移至子线程。” - “线程间通信必须通过信号槽或
QMetaObject::invokeMethod
,禁止直接跨线程访问对象。”
七、图形与动画
- “
QPainter
实现2D绘图,支持矢量图形(路径、渐变)、图像缩放和坐标变换。” - “
QPropertyAnimation
控制属性动画,如平滑移动窗口:animation->setPropertyName("geometry");
”
八、国际化与调试
- “国际化流程:用
tr()
包裹文本→lupdate
生成.ts文件→Linguist翻译→lrelease
生成.qm文件。” - “
qDebug()
输出调试信息,Q_ASSERT
断言检查条件,qInstallMessageHandler
自定义日志处理。”
九、部署与扩展
- “发布应用时,
windeployqt
(Windows)或macdeployqt
(Mac)自动打包依赖库。”