导言:

Qt的信号号和槽 (Signal&Slots)是Qt的特性,深入理解该机制是能够精通Qt编程的关键。

信号号和槽 (Signal&Slots)的作用:

信号和槽用于两个对象之间的通信。

常见的如:Qt的部件类(l例如:Widget)中定义了一些信号和槽,一般的操作是子类化这个部件,然后添加自己的信号和槽来实现想要的功能。

信号号和槽 (Signal&Slots)机制与回调函数的区别:

回调函数是指向函数的指针,把这个回调函数指针传递给要被处理的函数,那么就可以在这个函数被处理时在适当的地方调用这个回调函数。

信号和槽的机制,一个信号可以关联到多个槽上,多个信号也可以关联到同一个槽上,甚至,一个信号还可以关联到另一个信号上。

信号和槽的运用:

定义信号

例如:
signals:
void dlgReturn(int); //自定义的信号

说明:
1、声明一个信号要使用signals关键字

2、在signals 前面不能使用public、private和protected等限定符,因为只有定义了该信号的类及其子类才可以发射该信号。

3、而且信号只用声明,不需要也不能对它进行定义实现。

4、信号没有返回值,只能用void类型。

5、使用信号和槽,还需要在类声明的最开始处添加Q_OBJECT宏。

定义槽:
例如:
private slots:
void showValue(int value);

说明:
1、声明一个槽需要使用slot关键字。

2、一个槽可以是private\public\或者protected类型。

3、槽也是可以声明为虚函数。

信号和槽关联函数:

bool QObject::connect(const QObject *sender, const char * signal, const QObject *receiver, const char *method, Qt::ConnectionType type = AutoConnection )

一个控制台实现connect连接信号和槽的实例

目标:通过该实例实现对象间的简单通信。

首先定义一个类Foo
1、设置两个私有变量val,area。 同时可以通过公有函数value()、getArea()来访问这两个私有变量。
2、定义两个信号 valueChange(int), areaChange(int)
3、定义槽 setValue(int)、circleSolve(int).

#define PI 3.14class Foo: public QObject
{Q_OBJECTpublic:Foo();int value() const{return val;};double getArea() const {return area;};public slots:void setValue(int);void cirleSolve(int radius);signals:void valueChanged(int);void  areaChange(int);
private:int val;double area;
};

其次,实现这个类:

Foo::Foo()
{}//更新val 值,并发送值更改单哦信号
void Foo::setValue(int v)
{if(v!= val){val=v;emit valueChanged(v);}
}//计算圆面积,并发送面积信号
void Foo::cirleSolve(int radius)
{area = PI*radius*radius;emit areaChange(radius);
}

接着,在main()关联 并测试,这里做了三项内容
1、建立对象c、b
2、将c对象的操作与b对象的槽相关联。

这样当c对象调用setValue()、circleSolve()函数将会影响b的私有变量。

int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);Foo c,b;QObject::connect(&c,SIGNAL(valueChanged(int)),&b,SLOT(setValue(int)));QObject::connect(&c,SIGNAL(areaChange(int)),&b,SLOT(cirleSolve(int )));c.cirleSolve(6);cout<<"the circle area of b: "<<b.getArea()<<endl;b.setValue(8);cout<<"the testValue of b is :"<<b.value()<<endl;cout<<"the testValue of c is :"<<c.value()<<endl;c.setValue(5);cout<<"the testValue of b is :"<<b.value()<<endl;cout<<"the testValue of c is :"<<c.value();return a.exec();
}

信号和槽的使用总结:

1、定义信号和槽

2、关联

在适当的时候发送信号

3、使用要点:

  • 需要继承QObject或其子类

    在类声明的最开始添加QOBject 宏

    槽中的参数类型要和信号的参数类型对应。

    信号只用声明,且返回值为void的类型。

Qt 控制台 使用connect连接信号和槽相关推荐

  1. Qt源码分析之信号和槽机制

    Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的 说法,简单点说就是如何在一个类的一 ...

  2. Qt 多线程中地信号与槽

    Qt 多线程中地信号与槽 函数原型: 1 QObject::connect(const QObject *sender, const char *signal, const QObject *rece ...

  3. QT核心机制3:信号与槽

    个人博客对应地址:QT核心机制3:信号与槽 写在前面 这篇文章基本是对Qt官方文档某些章节的翻译理解了,翻译这些章节的原因是我认为这些是Qt中最核心的东西,翻译的过程也就是强迫自己认真去读它们的过程, ...

  4. 最新QT从入门到实战完整版(08.qt中的坐标系-09 信号和槽-点击按钮关闭窗口_)

    最新QT从入门到实战完整版(08.qt中的坐标系-09 信号和槽-点击按钮关闭窗口_) 一.08.qt中的坐标系 二,09 信号和槽-点击按钮关闭窗口_ 来自 一.08.qt中的坐标系 二,09 信号 ...

  5. Qt工作笔记-ui文件连接信号与槽

    今天又学到了新的东西,当然,这个也是在和李主任交谈的时候学会的,以前从来没这么做过. 下面演示下,用的代码是下面这篇博文的代码: https://blog.csdn.net/qq78442761/ar ...

  6. Qt入门(3)——信号和槽

    信号和槽用于对象间的通讯.信号/槽机制是Qt的一个中心特征并且也许是Qt与其它工具包的最不相同的部分. 在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个窗口部件.更一般地,我们希 ...

  7. Qt从入门到放弃——信号和槽机制(SigalSlot)

    标题信号和槽概念 Qt提供了信号和槽机制用于完成界面操作的响应,信号和槽机制是完成任意两个Qt对象之 间的通信机制.其中,信号会在某个特定情况或动作下被触发,槽是等同于接收并处理信号的函数. 例如,窗 ...

  8. QT Creator应用程序开发——信号与槽

    目录 一.QWidget基础窗口控件 二.信号与槽实例 三.信号与槽的补充知识 一.QWidget基础窗口控件 QWidget类是所有用户页面对象的基类,称为基础窗口控件,是一块矩形的页面可视区域,且 ...

  9. Qt工作笔记-Qt5新版信号与槽

    运行截图如下: 格式如下: [static] QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemb ...

最新文章

  1. 数字孪生白皮书(2019)
  2. intellij idea的TFS拉取项目文件不完全、文件误删恢复、TFS忽略文件解决方法
  3. 利用伸展树提高区间操作的性能
  4. java的基础类型和字节大小_java的基础类型和字节大小
  5. R语言是如何增强数据科学
  6. Centos安装MysqlServer与MysqlWorkbench
  7. 怎么把pdf转成word
  8. 【PS】免费 使用PS批量将pdf转换成图片 pdf转图片 pdf转jpg pdf转png
  9. 国军标GJB 151B-2013军用设备和分系统电磁发射和敏感度要求与测量(海军10项)
  10. wpa_supplicant配置
  11. JavaScript实现汉字转拼音功能
  12. 2013年总结-托福备考,减肥成功,微软实习,VMware工作,硕士毕业
  13. Blob对象判断是不是图片类型以及Blob数据下载
  14. 2018年物联网趋势
  15. Android判断有无外置SD卡(TF卡),并读写文件
  16. 纯干货!埃森哲的大数据分析框架分享-part 1
  17. 【VideoQA最新论文阅读】第一篇视频问答综述Video Question Answering: a Survey of Models and Datasets
  18. 天池训练营——基于人脸的常见表情识别(3)——模型搭建、训练与测试
  19. 第八章 习惯五 知彼解己——移情沟通的原则
  20. mysql取汉字首拼_MYSQL 获取每个汉字的拼音首字母

热门文章

  1. improve php,解析提高PHP执行效率
  2. 【Python】字典(Dictionary) items()方法
  3. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170327
  4. 推荐!计算机视觉最适合入门的 8 本教程,算法与实战兼备
  5. 力荐 | 吴恩达《序列模型》精炼笔记(1)-- 循环神经网络(RNN)
  6. div的visibility和display属性区别
  7. 总结数据库设计中的14个技巧
  8. 数据库记录的添加、修改、删除(DataAdapter、DataTable 、DataRow )
  9. leetCode刷题-第二题两数之和
  10. 汇编中数据处理的基本问题