Wt connect函数,将参数传递给函数,该函数是一个connect函数参数

时间:2017-08-23 08:11:21

标签: c++ arguments bind wt

以下代码段使用带有两个参数的Wt / C ++ connect。 如何将参数传递给& mode :: func。

button = new WPushButton("func 1", buttons);
stuff()->addWidget(button);
button->clicked().connect(this, &mode::func);

换句话说,如何制作& mode :: func(数字)。在下面查看所需的代码。

int number = 5;
button = new WPushButton("func 1", buttons);
stuff()->addWidget(button);
button->clicked().connect(this, &mode::func(number));

1 个答案:

答案 0 :(得分:2)

因为Wt 4即将发布,我将在Wt 4中提及它是如何完成的。

对于Wt 3:

如果你连接了这样的函数,那么mode::func将被点击信号的WMouseEvent调用,如果它需要参数。您可以改为使用boost::bind

int number = 5;
button = new WPushButton("func 1");
stuff()->addWidget(button);
button->clicked().connect(boost::bind(&mode::func, this, number));

如果删除了this,这仍会自动断开广告位,就像原始代码一样。如果您使用std::bind(或lambda),它将不会自动断开插槽。

我从原始代码中移除了buttons参数,因为它将buttons设置为父级,但随后使用stuff()将其移至addWidget,使其成为父级

对于Wt 4:

在Wt 4中,您必须使用std::bind或lambda函数。你可以这样做:

int number = 5;
button = stuff()->addWidget(std::make_unique<WPushButton>("func 1"));
button->clicked().connect(bindSafe([this,number]{
  func(number);
}));

bindSafe确保在删除this后不调用lambda。

如果您不想防止删除bindSafe,可以省略this。在许多实际情况中,button之前会删除this,因此无需bindSafe