Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152937
  • 博文数量: 40
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-11 09:11
文章分类

全部博文(40)

文章存档

2020年(1)

2017年(36)

2014年(3)

我的朋友

分类: C/C++

2017-03-17 14:32:57

一、使用自定义的信号和槽,需要注意以下几点:  
     1、类的声明和实现分别放在 .h.cpp 文件中;  
     2、类声明中包含 Q_OBJECT宏; 
     3、信号只要声明不要设计其的实现函数; 
     4、信号的返回类型永远都是void; 
     4、发射信号用 emit关键字;  
     5、自定义槽的实现与普通成员函数的实现一样;
     6、槽的参数不能有缺省值;
     7、如果一个信号关联多个槽,那么信号发出后,无法确定哪个槽函数先执行。
二、示例

点击(此处)折叠或打开

  1. /***头文件***/

  2. #ifndef MAINWIDGET_H

  3. #define MAINWIDGET_H

  4. #include <QWidget>

  5. #include <QDebug>

  6. class MainWidget : public QWidget

  7. {

  8.  Q_OBJECT

  9. public:

  10.  explicit MainWidget(QWidget *parent = 0);

  11.  void setValue(int x);

  12. signals:

  13.  void ValueChanged(int x);

  14. public slots:

  15.  void ChangeValue(int x);

  16. private:

  17.  int oldvalue;

  18.  

  19. };

  20. #endif // MAINWIDGET_H

  21. /***源文件***/

  22. #include "headers/mainwidget.h"

  23. MainWidget::MainWidget(QWidget *parent) :

  24.  QWidget(parent)

  25. {

  26.  oldvalue = 9;

  27.  connect(this,SIGNAL(ValueChanged(int)),this,SLOT(ChangeValue(int)));

  28. }

  29. void MainWidget::setValue(int x)

  30. {

  31.  if(x != oldvalue)

  32.  {

  33.  emit ValueChanged(x);

  34.  }

  35. }

  36. void MainWidget::ChangeValue(int x)

  37. {

  38.  oldvalue = x;

  39.  qDebug() << oldvalue;

  40. }

  41. /***主函数***/

  42. #include <QApplication>

  43. #include "headers/mainwidget.h"

  44. int main(int argc,char * argv[])

  45. {

  46.  QApplication a(argc,argv);

  47.  MainWidget mainwidget;

  48.  mainwidget.setValue(99);

  49.  return a.exec();

  50. }

  51. //通过控制台可以看到槽函数打印出来的数字99

  52. //该程序的执行过程很简单,首先在main()函数中定义mainwidget对象,然后调用mainwidget的public函数setValue(int x)希望更改oldvalue的值,在setValue(int x)函数中首先判断x与oldvalue是否相等,如果不等发出信号ValueChanged(int x)信号来调用槽函数ChangeVlaue(int x),在槽函数中真正实现值得改变并打印新的值。

阅读(946) | 评论(0) | 转发(0) |
0

上一篇:QT网络编程

下一篇:QT事件过滤器

给主人留下些什么吧!~~