问题描述
我在按钮按下回调中调用 singleshot,但我的超时槽从未被调用,在调试器中,我的代码到达我调用 singleshot 函数的位置,但它从未到达我的超时函数中的断点。
在 .h 中:
private slots:
void on_snoozeTimeout(Data d);
在 .cpp 中:
void MyClass::on_snoozeBtn_clicked()
{
QTimer::singleShot(snoozeTimeoutValue*1000,this,SLOT(on_snoozeTimeout(selectedData)));
}
void MyClass::on_snoozeTimeout(Data d)
{
//not hitting this breakpoint
}
解决方法
SLOT
宏不能以您尝试使用的方式接受函数参数。改用 lambda:
QTimer::singleShot(snoozeTimeoutValue*1000,[this,selectedData](){
on_snoozeTimeout(selectedData);
});
,
使用qt4.8,重构代码不使用参数