关于Qt信号与槽机制的传递方向性研究


最近由于项目的需求,一直在研究Qt。信号与槽机制是Qt的一大特色,该机制允许两者间传递参数,依次来实现对象间的通信。这个参数会分别存在于信号的参数列表和槽函数的参数列表中。需要注意的是,若将槽函数绑定至信号,槽函数的参数列表元素数目只能少于等于信号的参数列表元素数目。而且顺序和类型不能改变。至于缺少的参数应从信号参数尾部开始缺少。

突然今天想起来一个问题,如果一个对象发出信号,将内部的一个成员变量(非简单类型)作为参数向外发送,槽函数就可以接收到这个对象,那么槽函数是否可以完全操作这个对象呢?如果可以完全操作,那么这个信号与槽机制就是一个双向的通讯过程,即A可以触发B,B又能对A进行操作;如果操作无效,则说明该机制是一个单向的通讯过程,即A触发B,B进行处理,但不能反向写数据。

闲言少叙,让实例说话

先建立一个console application

建立头文件CustomClasses.h

代码如下:

  1. #ifndef CUSTOMCLASSES_H   
  2. #define CUSTOMCLASSES_H   
  3.   
  4. #include <QObject>   
  5.   
  6. class TPerson   
  7. {   
  8. private:   
  9.     QString _Name;   
  10. public:   
  11.     TPerson();   
  12.     void SetName(QString Name);   
  13.     QString GetName();   
  14. };   
  15.   
  16. class TSender:public QObject   
  17. {   
  18.     Q_OBJECT   
  19. private:   
  20.     TPerson _p;   
  21. public:   
  22.     TSender();   
  23.     void click();   
  24.     void disp();   
  25. signals:   
  26.     void NewName(TPerson P);   
  27. };   
  28.   
  29. class TReceiver:public QObject   
  30. {   
  31.     Q_OBJECT   
  32. public:   
  33.     TReceiver();   
  34. public slots:   
  35.     void GetNewName(TPerson P);   
  36. };   
  37. #endif // CUSTOMCLASSES_H  
  • 1
  • 2
  • 3
  • 下一页

相关内容