Qt之信号与槽(附带对MFC中消息的理解)
2014-06-18 09:50
971 查看
无论是Qt中的信号与槽还是MFC中的消息,说白了都是命令与执行的关系。我下达命令(发出信号,或者消息),特定的人(槽或者消息函数)去执行。我觉得这样会比较好理解。信号与槽这个概念里,我觉得比较容易理解出差错或者是理解不全的地方是,谁去执行与谁发出命令可以是另个不同的对象,但是对命令的接收(connect)必须在执行的那个对象里面进行绑定。信号可以绑定多个槽,槽也可以和多个信号绑定。换句话说,我发出一条命令,可以有很多人去执行,执行的方式也可以不同。同样的同一个执行方式,也可以有不同的人发送不同的命令去让他执行。举个例子:父界面要给子界面发送文字消息,很好做,直接在父类里面用父类发出的信号,去连接子类里面的槽。
上面是一个很简单的例子,类之间的信号与槽的连接使用。当然也可以在Child类中进行connect连接信号与槽,这样就更加清晰了。各自使用connect时,需要注意明确谁发出信号,谁接收。
MFC中的消息机制道理其实是一样的,只不过是通过定义消息响应及消息的编号,在需要发送消息的地方用SendMessage进行消息发送。
具体的工作原理细节,还是要去实现一下,自己体会一下。
Father { public: Father() { connect(this,SIGNAL(SendToChild(string)),c,SLOT(GetFromFather(string)));//发出命令,子类执行命令 connect(c,SIGNAL(SendToFather(string)),this,SLOT(GetFromChild(string))); //子类发出命令,父类执行命令 } ~Father(); public: Child* c; signals: void SendToChild(string); public slots: void GetFromChild(string s) { println("child:%s",s); } public: void SendMessageToChild() { emit(SendToChild("Hello ,I am Father."));//emit为发出一个信号。 } }; class Child { public: Child; ~Child(); public: void SendMessageToFather() { emit(SendToFather("Hello, I am Child.")); } public slots: void GetFromFather(string s) signals: void SendToFather(string); };
上面是一个很简单的例子,类之间的信号与槽的连接使用。当然也可以在Child类中进行connect连接信号与槽,这样就更加清晰了。各自使用connect时,需要注意明确谁发出信号,谁接收。
MFC中的消息机制道理其实是一样的,只不过是通过定义消息响应及消息的编号,在需要发送消息的地方用SendMessage进行消息发送。
具体的工作原理细节,还是要去实现一下,自己体会一下。
相关文章推荐
- VJGUI消息设计-兼谈MFC、QT和信号/槽机制
- [转载] 分析与理解MFC消息反射机制
- VJGUI消息设计-兼谈MFC、QT和信号/槽机制
- 关于qt的信号槽机制的理解
- MFc消息映射机制理解
- QT中信号函数的理解
- 深入理解MFC消息循环
- 对QT 的信号连接类型的理解
- MFC 消息处理的简单理解
- 关于qt的信号槽机制的理解 分类: QT学习记录 2011-09-23 11:22 1872人阅读 评论(1) 收藏
- MFC消息响应机制及映射机制理解
- 从函数指针角度理解MFC消息映射
- MFC消息映射的一些理解
- 关于qt的信号槽机制的理解
- Qt深入理解信号与槽
- 深入理解MFC中的消息映射原理!!!
- MFC视频教学第一课,做一个简单的界面,理解应用程序和操作系统之间的消息传递机制
- Qt深入理解信号与槽
- Qt4.7中,线程,信号,事件的一点理解
- 分析与理解MFC消息反射机制