0

我在一个项目中使用Wt C++ 库。我正在尝试使用该connect(...)功能将插槽连接到按钮按下。该connect(...)函数的文档可以在这里找到。

本质上,每次在一组单选按钮中检测到更改时,都会调用作为指向该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;
        }
    }
}

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

4

1 回答 1

1

您可以使用Wt:WSignalMapper,可以在此处找到文档。使用 aWt: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在问题中使用上述功能。

更新:

正如评论中指出的那样, aWt:WSignalMapper已经过时了。您现在应该使用boost::bind()或者std::bind()如果您使用 C++ 11 或更高版本。然后代码变为:

// for all radio buttons
button->changed().connect(boost::bind(this, &MyWidget::RadioButtonToggle, button));
于 2014-03-09T12:37:11.397 回答