传递参数和功能指针

时间:2014-03-09 02:55:56

标签: c++ wt

我在项目中使用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;
        }
    }
}

如何将参数与此函数指针一起传递?

1 个答案:

答案 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));