博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Meta-Object,信号和槽
阅读量:2234 次
发布时间:2019-05-09

本文共 1029 字,大约阅读时间需要 3 分钟。

Meta-Object,信号和槽
        Qt成功能一个主要的方面就是对 C++的扩展, 使之能
把彼此独立的软件模块连接起来,而不需要模块间
    
的任何细节。这就是元对象模型(Meta-Objecct Model)系统, 它提供了两个关键的特性: 信号/槽和内省
    (introspection), 内省功能允许程序在运行时能得到QObject子类的元信息(meta-information), 其中包
    含了全部信号和槽列表, 类名字,属性, 内容相关的文本翻译支持, 它以是构成QSA的基础.
        这个机制的工作过程如下:
          ● Q_OBJECT声明了一些QObject子类必须实现的内省函数:metaObject(),TR(),qt_metacall()等
          ●  Qt的moc工具实现Q_OBJECT宏声明的函数和所有的信号.
          ●  QObject成员函数connect()和disconnect()使用这些内省函数实现信号和槽的连接.
        一个信号可以连接多个槽,担调用顺序是随机的; 多个信号可以连接到一个槽;一个信号可以连接到另一
    个信号,
第一个信号发出后,第二个信号也同时发送; 连接可以被删除; 连接的信号和槽必须有相同的参数
    
类型才能成功连接,如果信号里的参数多于槽的参数,多余的被忽略; 
            纯粹的信号函数,可以不用实现,只有定义就行了.
        
对象树:QObjects将它们自己组织为一个对象树,一个对象被销毁时,它会自动销毁它的所有了对象,并将自己父对象的children()列表中移除。我们只
需要记住的是如果创建了一个没有父对象的对象时,必须自己销毁它们。可以使用QOjbect::dumpObjectTree(),QObject::dumpObjectInfo()来观察程序的对象树。
        
对象的构造/销毁顺序:在对象创建在堆中时(使用new),它们可能以任意的顺序构造和销毁;当对象创建在栈中时,根据C++标准,它们以创建时相反的顺序销毁。来考虑如下的代码:
int main() {
      QPushButton quit("Quit");
      QWidget window;
      quit.setParent(&window);
      ...
}
这时当父对象window销毁时,他会同时销毁他的所有子对象,在这里是quit, 在window对象被销毁后,系统会继续销毁下一个在栈中的对象quit, 可是它已经被销毁了,所以为引起问题,如果把两个对象的创建顺序调换一下,就没问题了。

转载地址:http://scibb.baihongyu.com/

你可能感兴趣的文章
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java并发指南7:JUC的核心类AQS详解
查看>>
Java并发指南8:AQS中的公平锁与非公平锁,Condtion
查看>>
Java网络编程和NIO详解6:Linux epoll实现原理详解
查看>>
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
查看>>
Java网络编程与NIO详解8:浅析mmap和Direct Buffer
查看>>
Java网络编程与NIO详解10:深度解读Tomcat中的NIO模型
查看>>
Java网络编程与NIO详解11:Tomcat中的Connector源码分析(NIO)
查看>>
深入理解JVM虚拟机1:JVM内存的结构与消失的永久代
查看>>