2013-04-18 19 views
1

我正在研究一個gtkmm程序,我想要一個按鈕,當按下時,它會更改給定的變量。對於密集的目的,我們可以說我不能讓這個變量全局化。它仍然可以調用類似:無論如何將參數傳遞給按下Gtkmm按鈕時調用的方法?

m_button2.signal_clicked().connect(sigc::ptr_fun(&on_player_button_clicked)); 

其中on_player_button_clicked是按下按鈕2時就是所謂的方法,而且還通過它的參數。所以,我想我的按鈕,按下時,打電話給我的方法是這樣的:

int parameter 
m_button2.signal_clicked().connect(sigc::ptr_fun(&on_player_button_clicked(parameter))); 

如果這是不可能的,有沒有什麼辦法,我讓我的按鈕來改變這個變量不會使變量全球性的?

回答

1

在設計方面,至少是面向對象設計,首先決定誰擁有變量。

然後,這個想法是發送給該所有者一條消息,「先生老闆,我命令你改變變量」。你可以通過發出一個「variable_needs_change」信號並讓所有者監聽它,或者給所有者一個setter方法並讓按鈕使用它(通過給回調函數訪問所有者的引用)來做到這一點。

但是把它放在一邊,有一個簡單的綁定選項。這是staright-forward解決方案:使用sigc :: bind來添加參數。在gtkmm的書中有一個例子,如果我沒有弄錯的話(也可能在sigC++教程中)。

相關問題