我正在研究一个gtkmm程序,我希望有一个按钮,当按下它时,它会改变一个给定的变量。对于密集的目的,我可以说我不能使这个变量全局化。是否仍然可以调用类似的东西:
m_button2.signal_clicked().connect(sigc::ptr_fun(&on_player_button_clicked));
其中on_player_button_clicked是按下button2时调用的方法,但也传递一个参数。因此,我希望我的按钮在按下时调用我的方法:
int parameter
m_button2.signal_clicked().connect(sigc::ptr_fun(&on_player_button_clicked(parameter)));
如果无法做到这一点,我有没有办法让我的按钮改变这个变量而不使变量成为全局变量?
答案 0 :(得分:1)
在设计方面,至少是OO设计,首先要决定谁拥有变量。
然后,想法是向该所有者发送一条消息,“先生,我命令您更改变量”。您可以通过发出“variable_needs_change”信号并让所有者听取它,或者给所有者一个setter方法并让按钮使用它(通过给回调函数访问对所有者的引用)来实现这一点。
但是把它放在一边,有一个简单的绑定选项。这是直播解决方案:使用sigc :: bind添加参数。在gtkmm书中有一个例子,如果我没有记错(也可能在sigc ++教程中)。