2014-11-14 90 views
2

我知道我想要實現的是可能的,因爲我可以用lambda表達式做到這一點,我之前做過(幾個月前我只是不記得語法) 。基本上,我想連接一個功能的定時器/按鈕/等。以促進活動的運作。Qt連接()沒有QObject或插槽

這是我工作的代碼:

connect(&renderTimer, &QTimer::timeout, [ = ]() { 
     onTimerUpdate(); 
    }); 

使用拉姆達連接到插槽。我只想引用函數本身,而不是使用lambda表達式。我曾嘗試插入方法onTimerUpdate()&onTimerUpdate,其中沒有任何工作。我不想使用QObject或它的任何預生成的bullcrap - 我也不想在我的課程中定義插槽。我想,很簡單,直接連接到我的功能。

回答

6

這是格式連結到一個成員函數時:

connect(&renderTimer, &QTimer::timeout, this, &ArclightGLWidget::onTimerUpdate); 

這是格式連結到自由功能可按時(同樣爲拉姆達)

connect(&renderTimer, &QTimer::timeout, onTimerUpdate); 

而這是格式時連接到一個靜態成員函數:

connect(&renderTimer, &QTimer::timeout, SomeType::onTimerUpdate); 
+0

我已經試過這一點;發生以下錯誤:http://pastebin.com/6dpHrXkE – Krythic 2014-11-14 19:38:54

+0

@Krythic我認爲這是一個免費的功能,請參閱我的編輯。 – dtech 2014-11-14 19:42:48

+0

工作。謝謝。 – Krythic 2014-11-14 19:44:03

1

據推測,這呼叫正在取得內部其中onTimerUpdate是其中的一個類。如果是這樣,你可以撥打:

connect(&renderTimer, &QTimer::timeout, this, &foo::onTimerUpdate); 

這是最好的拉姆達因爲Qt的將管理連接,而你也將能夠調用sender()slot

但是,如果你是在onTimerUpdate是你也可以使用完全一樣,你已經把問題的拉姆達的方法類中:

connect(&renderTimer, &QTimer::timeout, [=](){onTimerUpdate();});