我在项目中使用Wt C ++库。我正在尝试使用connect(...)
功能将插槽连接到按钮按下。可以找到connect(...)
函数的文档here。
基本上,每次在一组单选按钮中检测到更改时,都会调用作为指向connect(...)
函数的指针传递的函数。
以下是代码的简短摘录:
...
_group = new Wt::WButtonGroup(this);
Wt::WRadioButton *button;
button = new Wt::WRadioButton("Radio Button 0", this);
_group->addButton(button, 0);
_group->setSelectedButtonIndex(0); // Select the first button by default.
_group->checkedChanged().connect(this, (&MyWidget::RadioButtonToggle)); //Need to pass parameter here
...
我需要将selection
参数传递给函数RadioButtonToggle(Wt::WRadioButton *selection)
,以便我可以在函数体中使用它,如下所示:
void CycleTimesWidget::RadioButtonToggle(Wt::WRadioButton *selection)
{
switch (_group->id(selection))
{
case 0:
{
//Do something...
break;
}
}
}
如何将参数与此函数指针一起传递?
答案 0 :(得分:1)
您可以使用Wt:WSignalMapper
,找到文档here。使用Wt:WSignalMapper
,您可以将多个发件人连接到一个插槽。在您的情况下,多个发件人的Wt:WRadioButton
不同。
Wt::WSignalMapper<Wt:WRadioButton *> * mapper = new Wt::WSignalMapper<
Wt::WRadioButton *>(this);
mapper->mapped().connect(this, &MyWidget::RadioButtonToggle);
// for all radio buttons
mapper->mapConnect(button->changed(), button);
...
然后,您可以在问题中使用上面所写的函数RadioButtonToggle
。
<强>更新强>
正如评论中所指出的,Wt:WSignalMapper
已过时。如果使用C ++ 11或更高版本,现在应该使用boost::bind()
或std::bind()
。然后代码变为:
// for all radio buttons
button->changed().connect(boost::bind(this, &MyWidget::RadioButtonToggle, button));