c++ - Wt connect函数,将参数传递给函数,该函数是连接函数参数

标签 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(number)。在下面查看所需的代码。

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

最佳答案

因为 Wt 4 即将发布,我也会提到如何在 Wt 4 中完成。

对于重量 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,使其成为父级。

对于权重 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。

如果你不想防止删除this,你可以省略bindSafe。在许多实际情况下,buttonthis 之前被删除,使得 bindSafe 变得不必要。

关于c++ - Wt connect函数,将参数传递给函数,该函数是连接函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45834171/

相关文章:

java - 将参数从函数传递到 Java 中的内部函数?

ruby - 方法如何在 Ruby 中使用散列参数?

c - 在监听套接字上使用 select()

javascript - jQuery 绑定(bind)提交导致问题

python - 在函数内调用函数并传递其参数 (*args) - Python

javascript - 用于绑定(bind)回调序列的 Composer 函数

c++ - 创建作为运算符(operator)工作的方法

C++决定开关中变量的类型

c++ - 从使用另一个共享库的源文件构建和使用共享库。 (R里面)

c++ - Boost::filesystem、std::sort:在排序过程中保留信息时遇到问题