QT槽函数连接方式

1.直接连接

使用Qt::DirectionConnection,槽函数会直接在发射信号的线程中执行,没有切换线程的过程。这是默认的连接方式。

// 1.直接连接
connect(sender, SIGNAL(mySignal()), receiver, SLOT(mySlot()), Qt::DirectConnection);

2.自动连接

使用Qt::AutoConnection,系统会根据发射信号的线程和接收槽函数的线程自动选择合适的连接方式。如果信号和槽函数在同一线程中,采用直接连接,否则采用队列连接。

// 2.自动连接
connect(sender, SIGNAL(mySignal()), receiver, SLOT(mySlot()), Qt::AutoConnection);

3.队列连接

使用Qt::QueuedConnection(),槽函数的执行会放入接收对象的事件队列中,由接收对象所在线程的事件循环处理。

// 3.队列连接
connect(sender, SIGNAL(mySignal()), receiver, SLOT(mySlot()), Qt::QueuedConnection);

4.连接到Lambda表达式

使用Lambda表达式作为槽函数,可以在信号发射时执行一段匿名的代码。

// 4.连接到Lambda表达式
connect(sender, SIGNAL(mySignal()), [=](){
	// 函数体
});

关于匿名函数的讲解可参考此博客:C++ Lambda表达式详解

5.连接到全局函数

可以将全局函数作为槽函数连接到信号。

// 5.连接到全局函数
connect(sender, SIGNAL(mySignal()), myGlobalFunction);

6.连接到静态成员函数

可以将静态成员函数作为槽函数连接到信号。

// 6.连接到静态成员函数
connect(sender, SIGNAL(mySignal), MyClass::myStaticFunction);

7.连接到带参数的槽函数

如果信号和槽函数的参数不匹配,可以使用QOverload宏来连接带参数的槽函数。

// 7.连接到参数的槽函数
connect(sender, SIGNAL(mySignal(int)), receiver, QOverload<int>::of(&MyClass::mySlot));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值