QT信号槽

来源:互联网 发布:google pixel手机 知乎 编辑:程序博客网 时间:2024/06/09 18:52

QT信号槽原理

最近研究了一下QT的信号槽,在此给大家分享一下。

  • 认清本质,观察者模式

  • moc是个什么鬼

  • 如何创建维护观察者

  • 拓展google Sigslot库

  • 最后


认清本质,观察者模式

  • QT信号槽本质上是观察者模式的一个具体应用,信号方为被观察者,槽方为观察者。

MOC是个什么鬼

程序编译过程,预处理、编译、汇编、链接;

通过MOC工具拓展C++,C++的起源也是一个预处理器拓展C;

MOC是一个预处理器,将QT拓展的语法属性如signal、slot、Q_OBJECT宏转换为标准C++语法。

Q_OBJECT宏则生成新的cpp文件,包含元对象metaData,记录相关接口、信号、槽等信息。

MOC预处理解决了信号槽参数问题,对参数进行了封装。

如何创建维护观察者

QConnectionListVector维护观察者列表。

每个信号对应一个观察者以及槽信息的队列。

QObecjt::connect(…) —–>QMetaObject::connect(…) —–> sender addConnection(…) reciever—–>refSender(…)。

QMetaObject::activate(…)。

拓展google Sigslot库

信号槽的另一种实现方式sigslot库,纯正C++语法。

对比解决可变参数问题,QT MOC拓展,封装void *a[],reinterpret_cast强转(C++类型系统)。

最后

第一篇博客,科班毕业五年了,有些迷茫,花上一下午时间来清醒下…

计算机是一个很深奥的东东,如何构建自己的知识体系是个大工程…

语言:C/C++本质上的一些东西,类型系统,关键字,标准库,C++的虚函数表以及内存对象模型…

编译原理:一个翻译过程,关键是这些翻译过程做了哪些事情,又如何去符合一个语言规范…

操作系统:linux、windows操作系统,内核如何去维护信息,计算机的世界如此井井有条…

数据结构/算法:数据存储,组织,服务于算法…

轮子:接触了好多轮子,也自己造了好多轮子…

通信:数据包->硬件准入(ACL、VLAN等等)->驱动处理(数据封装,802.11转802.3)->内核2、3、4层(3层的IPTable,4层的tcp/ip)->应用层

图形/图像:三维处理、二维处理,openMesh、clipperLib、opengl、QT3D…

UI:界面是一个最直观的东东,QT做的还不错,QSS也能实现比较漂亮的界面…

数据库:没有怎么打过交道,到是大体看过sqlite,也自己定义过自己的数据保存格式…

1 0