StupidBeauty
Read times:295Posted at:Thu Apr 28 01:19:46 2011
- no title specified

Wt3.1.9文档翻译:Signal<A1,A2,A3,A4,A5,A6> 类模板参考,Signal<A1,A2,A3,A4,A5,A6> Class Template Reference

template<typename A1 = NoClass, typename A2 = NoClass, typename A3 = NoClass, typename A4 = NoClass, typename A5 = NoClass, typename A6 = NoClass>
class Wt::Signal< A1, A2, A3, A4, A5, A6 >

一个将事件传递给监听者的信号。

使用信号/信号槽来让一个对象(A)监听另一个对象(B)引起的事件。在这个情景中,对象B 在它的公有接口中暴露出一个信号,而对象A 将它的一个成员函数(充当槽的角色)连接到这个信号。接下来对象A(本座认为这里应该是B)就可以通过发射这个信号来向外宣告一个事件(它会触发所连接到的那些回调函数)。信号/信号槽是对图形界面程序中使用的流行的观察者模式的一般化。

一个信号可以使用多达6 个参数来为事件提供细节。一个信号槽必须与某个信号有相兼容的特征才能与它连接,这是根据参数来判断的。一个兼容的特征必须在成员函数中提供相同的参数,或者可以少一些(无视末尾的参数)。

当目标被删除时,信号自动与信号槽断开连接。另外,信号可在任何时候删除,甚至在它正在被发射的时候。

Signal 对象与WObject 对象整合在一起。一个Signal要求它的连接的目标,也就是监听一个事件的那个对象,必须是一个WObject。另外,每个信号都可以指定一个WObject 来作为它的所有者,而目标可以使用WObject::sender()来找出信号的发射者。

class MyWidget : public Wt::WContainerWidget

{

public:

MyWidget(Wt::WContainerWidget *parent = 0)

: Wt::WContainerWidget(parent),

done_(this)

{

Wt::WPushButton *button = new Wt::WPushButton(“Okay”);

button->clicked().connect(this, &MyWidget::process);

}

//为信号提供一个访问函数

Wt::Signal<int, std::string>& done() { return done_; }

private:

Wt::Signal<int, std::string> done_;

void process() {

done_.emit(42, “Totally done”); //发射信号

}

};

接下来,可以从另一个类中使用这个部件:

class GUIClass : public Wt::WContainerWidget

{

private:

void init() {

MyWidget *widget = new MyWidget(this);

widget->done().connect(this, &GUIClass::whenDone);

}

void whenDone(int result, const std::string& description) {

}

};

WSignalMapper是一个辅助类,在这个情况下很有用:你想要将多个信号连接到同一个信号槽,并且仍然想要使用某些属性来识别发送者。

参见:

WSignalMapper

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4