我已经定义了一个强类型的枚举,如下所示:
enum class RequestType{
type1, type2, type3
};
我还有一个定义如下的函数:
sendRequest(RequestType request_type){
// actions here
}
我想每10秒钟调用一次
sendRequest
函数,因此在一个简单的情况下,我将使用以下代码:QTimer * timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(sendRequest()));
timer->start(10000);
由于我需要将一些参数传递给
sendRequest
函数,所以我猜我必须使用QSignalMapper
,但是由于QSignalMapper::setMapping
仅可直接用于int
和QString
,因此我不知道如何实现此功能。有没有相对简单的方法呢? 最佳答案
如果您是using C++ 11,则可以选择调用lambda函数以响应timeout
QTimer * timer = new QTimer(this);
connect(timer, &QTimer::timeout, [=](){
sendRequest(request_type);
});
timer->start(10000);
请注意,此处的连接方法(Qt 5)不使用SIGNAL和SLOT宏,这是有利的,因为错误是在编译时而不是在执行过程中捕获的。