QT中的反射机制

反射的需求

反射的设计模式需求

qt中的反射

java、c#这种有统一管理的语言对反射支持的比较好,c++中不支持反射。但是qt的元对象系统对反射提供了可能。
学习博文:
Q_INVOKABLE与invokeMethod用法全解

QMetaObject::invokeMethod

Q_INVOKABLE的理解与使用变得越来越重要。
使用Q_INVOKABLE来修饰成员函数,目的在于被修饰的成员函数能够被元对象系统所唤起。

bool QMetaObject::invokeMethod ( QObject * obj, const char * member,Qt::ConnectionType type,
QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument( 0 ), …)

线程与事件循环

事件循环与线程 一
难读:事件循环与线程 二

小总结

多线程的使用是需要小心的,qt提供了方便的方式创建多线程,但是在处理多线程的操作时会引起很多问题很难处理。
只有在没有提供非阻塞API的情况下才使用多线程。
用其他设计模式解决异步编程的问题:

1、状态机解决 网络编程的异步问题
2、拆分任务块用QMetaObject::invokeMethod解决异步的问题
3、QTimer固定时间出发不用在run()里面sleep(1000)来固定触发。
4、自己写消息队列来判断事件后触发。(hncc的旷世人脸对比)

QT程序只有一个gui线程负责交互。

posted @ 2025-10-24 17:02  wuya178  阅读(22)  评论(0)    收藏  举报