gpt4 book ai didi

c++ - 将参数与函数指针一起传递

转载 作者:行者123 更新时间:2023-11-28 07:02:13 25 4
gpt4 key购买 nike

我正在使用 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;
}
}
}

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

最佳答案

您可以使用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));

关于c++ - 将参数与函数指针一起传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22277849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com