Qt warning Pass a context object as connect 3th paramter

在Qt中使用三个参数重载的connect函数时,槽函数使用Lambda表达式。如果此时Lambda表达式使用了至少一个上下文对象。就会报pass a context object connect 3th paramter的warning。
例如

connect(selectionModel, 
		&QItemSelectionModel::selectionChanged,
        [&model](const QItemSelection &selected,const QItemSelection &deselected){
			/*use model to do something*/
        })

如果model已经结束了其生命周期(因为是在栈上定义的变量),则会向一个已经已经被删除的对象发送信号,这可能会导致程序的崩溃。所以Qt会报告一个warning,来降低出现崩溃的可能性。所以可以把使用的对象作为第三个参数传递给connect函数(注:如果Lambda里使用了多个上下文对象依旧有程序崩溃的可能性!!!)。

connect(selectionModel, 
		&QItemSelectionModel::selectionChanged,
        &model,	//3th paramter
        [&model](const QItemSelection &selected,const QItemSelection &deselected){
			/*use model to do something*/
        })

KDE的开源文档里也有对这一问题的描述。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值