[英]QT: passing strongly typed enum argument to slot
我已經定義了一個強類型的枚舉,如下所示:
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
,所以我不知道如何實現此功能。 有沒有相對簡單的方法呢?
如果您使用的是C ++ 11 ,則可以選擇調用lambda函數以響應timeout
QTimer * timer = new QTimer(this);
connect(timer, &QTimer::timeout, [=](){
sendRequest(request_type);
});
timer->start(10000);
請注意,此處的連接方法(Qt 5)不使用SIGNAL和SLOT宏,這是有利的,因為錯誤是在編譯時而不是在執行過程中捕獲的。
您可以創建onTimeout
插槽。 像這樣:
connect(timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
並在此插槽中:
void onTimeout() {
RequestType request;
// fill request
sendRequest(request);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.