Qt信号槽

Qt信号槽

  1. 介绍

    • 五种连接类型
      • Qt::AutoConnection, 自动选择连接类型(默认使用类型
        如果信号发送者接收者在同一个线程中,则会选则Qt::DirectConnection连接方式;
        否则使用Qt::QueuedConnection连接方式。当信号被发送时,才会决定使用哪种连接方式。
      • Qt::DirectConnection, 直接连接
        信号触发时,槽会立即响应,信号与槽在同一线程中
      • Qt::QueuedConnection, 队列连接
        当控制回到接收者的事件循环时才会调用槽,槽在自己的线程中执行
      • Qt::BlockingQueuedConnection, 阻塞型队列连接
        与Qt::QueuedConnection触发机制一样,不过会阻塞信号发送者的线程,直到槽函数执行完; 接收者与信号发送者不能同时存在同一线程中,否则程序会出现死锁
      • Qt::UniqueConnection, 唯一连接
        保证发送者与接收者信号只会连接一次,如果已经连接过的,再次连接就会返回失败。
  2. 使用

    • lamda函数
      使用lamda函数做槽
      // function1 直接将lamda函数当参数传递
      int main(int argc, char * argv[] )
      {
      	QApplication app(argc, argv);
      	A a;
      	a.function( [ = ](){
      			qDebug() << "hello world!";
      		}
      	);
      	app.exec();
      }
      class A
      {
      	A();
      	~A();
      	template<T>
      	void function(T pFunc){
      		// 将lamda函数与button相连,此连接只有button被析构时才会失效
      		// 因为无法使用Qt::UniqueConnection连接方式,所以function每调用一次,都将
      		// 产生新的连接
      		QObject::connect(button, &QPushButton::clicked, pFunc);
      	}
      private:
      	QPushButton *button;	  	
      };
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值