什么是信号和槽机制?
为了解开程序界面中不同对象的耦合,QT提供了信号和槽机制用于界面操作的响应,是完成任意两个QT对象之间的通信机制。QT对象包含许多预定义的信号和槽。
信号:在某个特定情况或者动作下被触发而发出的消息
槽:接收并处理信号的消息的函数。
当一个特定的事件发生时,一个信号被发送,与信号相关联的槽会响应信号并完成的相应的处理。
连接方式
在对应类中的构造函数中添加以下代码:
connect(Object1,SIGNAL(signal1),Object2,SLOT(slot1));
或者:
connect(Object1,"clicked()",Object2,"slot1()");
slot1为定义的处理函数,需要在对应类的头文件中定义。例如:
private slots:
void slot1();
优点
- 优点:
- 类型安全(方法签名)
- 松散耦合
效率
通过传递信号来调用槽函数将会比直接调用非虚函数的运行速度慢十倍。原因如下:
* 需要定位接收信号的对象
* 安全的遍历所有的关联
* 编组/解组 传递的参数
* 多线程的时候,信号可能需要排队等待
然而,对于创建堆对象的new和delete操作而言,信号和槽的运行代价只是它们很少的一部分,信号和槽导致的这点性能损耗,对实时应用程序是可以忽略的。同信号和槽机制的灵活性和简便性而言,这点性能的损失也是值得的。
不过我们一般是使用可视化界面设计直接生成了预定义的信号和槽机制的代码….