簡體   English   中英

QT:將強類型的枚舉參數傳遞給插槽

[英]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僅可以直接用於intQString ,所以我不知道如何實現此功能。 有沒有相對簡單的方法呢?

如果您使用的是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM