4.连接可以被移除:
这种情况用得比较少,因为在对象被删除时,Qt会自动移除与这个对象相关的所有连接。
disconnect(sender, SIGNAL(signal), receiver, SLOT(slot));
但是,常用的连接方式为:
connect (Object1,SIGNAL(signal),Object2,SIGNAL(slot));
其中,signal 为对象Object1的信号,slot 为Object2的槽。
提示:
信号与槽机制与普通函数的调用一样,如果使用不当的话,在程序执行时也有可能产生死循环。因此,在定义槽函数时一定要
注意避免间接形成无限循环,即在槽中再次发射所接收到的同样信号。
如果一个信号与多个槽相联系的话,那么,当这个信号被发射时,与之相关的槽被激活的顺序将是随机的。
宏定义不能用在 signal 和 slot 的参数中。
信号和槽的参数个数与类型必须一致。
信号和槽机制优点
类型安全
需要关联的信号和槽的签名必须是等同。即信号的参数类型和参数个数 同接收该信号的槽的参数类型和参数个数相同。不过
一个槽的参数个数是可以少于信号的参数的个数的,但是缺少的参数必须是信号参数的最后一个或者几个参数。如果信号和槽
的签名不符,编译器就会报错。
松散耦合
信号和槽机制大大降低了Qt对象的耦合度。发送信号的Qt对象不需要知道是哪个对象来接收它的信号,它只需要做的是在适
当的时间发送一个信号,而且不需要知道也不关心它的信号有没有被接收到,更不需要知道哪个对象的哪个槽接收到了信号。
同样地,Qt对象的槽也不需要关系是哪些信号连接了自己,如果信号和槽连接上了,Qt就能保证了适合的槽得到了调用。即
使关联的对象在运行时被删除。应用程序也不会崩溃。
信号和槽的效率
信号和槽机制增强了对象间通信的灵活性,当然在增加灵活性的同时在性能方面也会有一定的损失。同大家回调函数相比,信
号和槽机制运行速度有些慢。通常,通过传递一个信号来调用槽函数将会比直接调用直接调用非虚函数运行速度慢10倍。
原因:
需要定位接收信号的对象。
安全地遍历所有的关联。
编组/解组传递的参数。
多线程的时候。信号可能需要排队等待。
然而,与创建堆对象的new操作及删除堆对象的delete操作相比,信号和槽的运行代价只是它们很少一部分。信号和槽机制导
致的这点性能损耗,对实时应用程序是可以忽略的;同信号和槽提供的灵活性和简便性相比,这点性能损耗是值得的。
Qt 布局系统介绍
布局系统
作为一名 iOS 开发人员, 见证着 iOS 布局系统的不断完善, 从绝对布局, Autoresizing 到 Autolayout. 使得开发人员的工作效率
越来越高, 项目界面的可读性和易维护性越来越强. 如今 IDE 中的可视化界面工具已经非常强大, 许多网友"戏称" iOS 开发者
为"UI 拖拽师", 可见, iOS 开发中界面布局系统的高效. 所以, 优秀的布局系统的使命在于让开发者花更少的时间来完成更易维护
的界面.
同样的, 在 Qt 中, 系统提供了强大的排版机制来为窗口中的视图进行布局排版, 经过了对 Qt 布局一个初步的探索, 不得不对 Qt
布局系统的简洁高效而又功能强大表示赞叹.
布局系统的功能