Wt connect函数,将参数传递给函数,该函数是连接函数参数
Wt connect function, passing a parameter to a function which is a connect function argument
以下代码片段使用 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
设置为 parent,但随后使用 [=20= 将其移动到 stuff()
], 使得 parent.
重量 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
。在许多实际情况下,button
在 this
之前被删除,使得 bindSafe
变得不必要。
以下代码片段使用 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
设置为 parent,但随后使用 [=20= 将其移动到 stuff()
], 使得 parent.
重量 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
。在许多实际情况下,button
在 this
之前被删除,使得 bindSafe
变得不必要。