QT的信号和槽机制

什么是信号和槽机制?

为了解开程序界面中不同对象的耦合,QT提供了信号和槽机制用于界面操作的响应,是完成任意两个QT对象之间的通信机制。QT对象包含许多预定义的信号和槽。
信号:在某个特定情况或者动作下被触发而发出的消息
槽:接收并处理信号的消息的函数。
当一个特定的事件发生时,一个信号被发送,与信号相关联的槽会响应信号并完成的相应的处理。

连接方式

在对应类中的构造函数中添加以下代码:

connect(Object1,SIGNAL(signal1),Object2,SLOT(slot1));

或者:

connect(Object1,"clicked()",Object2,"slot1()");

slot1为定义的处理函数,需要在对应类的头文件中定义。例如:

private slots:
   void slot1();

优点

  • 优点:
    • 类型安全(方法签名)
    • 松散耦合

效率

通过传递信号来调用槽函数将会比直接调用非虚函数的运行速度慢十倍。原因如下:
* 需要定位接收信号的对象
* 安全的遍历所有的关联
* 编组/解组 传递的参数
* 多线程的时候,信号可能需要排队等待
然而,对于创建堆对象的new和delete操作而言,信号和槽的运行代价只是它们很少的一部分,信号和槽导致的这点性能损耗,对实时应用程序是可以忽略的。同信号和槽机制的灵活性和简便性而言,这点性能的损失也是值得的。

不过我们一般是使用可视化界面设计直接生成了预定义的信号和槽机制的代码….

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值