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