8.1 lazy-fashion
- QObject的赋值(assignment)构造函数被设为私有,所以所有按值传递QObject及其子类的行为将会报错
- 不要在堆上创建QVariant相关的类型,如QString,QList,QHash, QImage,
8.2
- QObject 如果有parent的则new 后无需delete
8.4
- 加入Q_OBJECT后必须运行qmake重新生成makefile
8.6
- 一切QObject 对象在QApplication之后创建,在QApplication销毁之前销毁,因此static QObject 对象是不允许的
- 推荐有parent的QObject在堆上创建(在栈上存在会释放多次的隐患),无parent的QObject在栈上创建
- 不推荐直接delete QObjects(可能会导致信号未处理),推荐QObject::deleteLater()
9
- 子widget不能超出父widget的范围
17
- 耗时的多线程计算尽量采用QtConcurrent不用QThread
- 不要在非主线程的线程中直接访问GUI(包括QPixmap,读取QLineEditd 中的内容),用信号槽
- thread affinity,线程亲和性,每个QObject都由一个线程创建,创建线程负责执行slots
- QThread::exec() 线程进入事件循环
- QApplication::postEvent()和queued signal/slot可以用于线程间的通信
- 使用qRegisterMetaType()注册signal/slot中的参数类型