QT学习之②信号与槽

  • ~QQ:3020889729
  • ~小蔡
  • 信号与槽的意义
  • 信号与槽的实质(文字:举例)
  • 信号与槽的工作(图解)
  • 信号与槽的创建
    • 信号的声明
    • 槽函数的声明
    • 槽函数的实现
  • (无重载)信号与槽的链接(connect)
  • 对有重载的信号和函数的链接方法
    • 信号的重载
    • 槽函数的重载
    • 实现链接(有图例)
  • 总结
  • 信号与槽链接的补充

~QQ:3020889729

~小蔡

信号与槽的意义

通常我们都不是单一的某一个功能独立实现,而是这个触发那个,又或者按某情况下应该执行某个功能。
这时候,QT中的信号与槽就体现了作用。当某一个对象发出某一个信号,进而影响另一个对象的动作。(比如:我按下一按键,对应的电脑执行某个功能——信号与槽(处理信号)就对应了。)

信号与槽的实质(文字:举例)

信号与槽的关系就像——你买了地铁票才能过检票一样。当你去乘坐地铁时,检票处将你是否购票的信号与地铁终端处理,确认你已购票,你才可以进入。
你的购票与否是信号,而所谓槽,就是地铁的终端处理,而起到链接作用的是检票处。
相同的,在QT中,我们的信号与槽也就是一些函数,通过一个connect函数,将他们联系起来,实现一定的功能——执行一定的动作。

信号与槽的工作(图解)

理解的工作图如下:

信号与槽的创建

信号的声明

QT中的信号要声明,且只需要声明不需要实现(也就是存在于.h中声明就可以了,不需要出现在.cpp中)。——注意:只能声明,不能实现,否则会报错——编译会出现重定义信号函数。
(5.4以上的版本)也就是在需要的类文件中的.h里,声明类里的signals部分下添加。
(代码如下:(该代码也就是在:text_signal.h ))

#ifndef TEXT_SIGNAL_H
#define TEXT_SIGNAL_H#include <QObject>class Text_signal : public QObject
{Q_OBJECT
public:explicit Text_signal (QObject *parent = nullptr);signals://自定义信号——与自定义槽函数,要想链接,就必须参数一致,一一对应//1.只需要声明,不需要实现//2.可以重载void hungry();//对应treat()//  void hungry(QString foodname);//对应槽函数:treat(QString foodname)
public slots:
};#endif // TEXT_SIGNAL_H

槽函数的声明

槽函数不光要在.h中声明,还要对应的.cpp中实现
(代码如下:(该代码也就是在:text_slots.h ))

#ifndef TEXT_SLOTS_H
#define TEXT_SLOTS_H#include <QObject>class text_slots: public QObject
{Q_OBJECT
public:explicit text_slots(QObject *parent = nullptr);signals:public slots://自定义槽函数//1.需要声明,也需要实现//2.可以重载void treat();// void treat(QString foodname);
};#endif // TEXT_SLOTS_H

槽函数的实现

(代码如下:(该代码也就是在:text_slots.cpp ))

#include "text_slots.h"text_slots::text_slots(QObject *parent) : QObject(parent)
{}//槽函数需要实现
void text_slots::treat()
{qDebug() << "请老师吃饭";
}//void text_slots::treat(QString foodname)
//{//直接传入QString的字符串,他会含有“”//为了去掉符号,需要将他转换成char*//方法是:在该类后边先添加.toUtf8()使得转换成utf-8编码//再跟上.data(),把编码转换为实际的数据就完成了//   qDebug() << "走起,请老师吃:" << foodname.toUtf8().data();
//}

(无重载)信号与槽的链接(connect)

信号与槽需要用到connect函数链接——进而实现功能控制。
connect的参数为四个(均为地址):
参数一:信号发送者的地址
参数二:发送的信号(函数地址)
参数三:信号接收者的地址
参数四:处理信号(槽函数)地址
例子:

//上边代码中有hungry()信号,也有treat()的槽函数
//这里直接引用这两个函数演示text_signal *signal_x1 = new text_signal (this);//这个是添加父类,也就是你将这些对象放在哪
text_slots *slots_x1 = new  text_slots (this);//一般就this指父类为当前类(即当前界面窗口)
//链接信号与槽,实现槽中的函数
connect(btn,&text_signal::hangry,slots_x1 ,&text_slots::treat);

对有重载的信号和函数的链接方法

信号的重载

还是只需要声明就可以了!

槽函数的重载

依然是声明加实现!(只是呢,最好这里设置的函数参数和信号的函数参数一致

实现链接(有图例)

因为是重载,所以当前不止一个信号函数,此时存在两个同名函数。
如果还是用之前的方式直接链接,那么就会报错,因为这时候含有两个函数,不知道指向谁。

所以,我们就要用到函数指针来指向指定的函数,区别各重载的函数
函数指针的声明/实例方法
我分为六个部分:(如图)

实现方法
(代码如下:)


//上边代码中有hungry()信号,也有treat()的槽函数
//这里直接引用这两个函数演示text_signal *signal_x1 = new text_signal (this);//这个是添加父类,也就是你将这些对象放在哪
text_slots *slots_x1 = new  text_slots (this);//一般就this指父类为当前类(即当前界面窗口)void (text_signal::* mode2_text_signal)(QString) = &text_signal::hangry;//使用函数指针
void (text_slots::* mode2_text_slots)(QString) = &text_slots::treat;//指向特定的函数//链接信号与指定槽,实现槽中的函数
connect(btn,mode2_text_signal,slots_x1 ,mode2_text_slots);

总结

QT中的信号与槽与后期设计密切相关。在理解信号与槽时,可以联系实际生活中的人事物来理解。

信号与槽链接的补充

断开信号与槽的链接,使用disconnect函数,至于参数与connect一样的。

QT学习之②信号与槽,以及链接实现方法相关推荐

  1. QT学习之信号和槽,图片的添加

    信号和槽 给控件改名字 为了分析代码方便,我们要给控件改名字,要通俗易懂. 例如:双击登陆后鼠标会选中右边的logoBt,即可修改名称. 什么是信号和槽 信号:信号就是指控件发出的特定信号. 比如按钮 ...

  2. Qt学习之信号与槽函数断开:disconnect

    当信号与槽没有必要继续保持关联时,可以使用disconnect函数来断开连接. bool QObject::disconnect ( const QObject * sender, const cha ...

  3. Qt学习笔记 信号和槽

    槽和普通c++成员函数一样只可以为虚函数,也可以被重用,可以是公有的也可以是私有的,也可以被其它的c++函数调用; 参数也是任意的 唯一不同的是本槽和信号是可以连在一起的,和c#的事件差不多.相连后每 ...

  4. Qt中的信号与槽机制解析

    注:要想使用Qt的核心机制信号与槽,就必须在类的私有数据区声明Q_OBJECT宏,然后会有moc编译器负责读取这个宏进行代码转化,从而使Qt这个特有的机制得到使用. 所谓信号槽,简单来说,就像是插销一 ...

  5. Qt eventFilter实现信号与槽

    对于Qt来说,信号与槽机制是其通信的一大亮点,但是Qt中也提供了其他的方法实现数据间的通信,如invokeMethod反射机制实现通信(https://blog.csdn.net/xx18030637 ...

  6. Qt工作笔记-信号与槽参数匹配问题

    今天,我把Qt3代码转化为Qt5,控件啥的都要换,李主任说了下为什么以前的信号和槽函数参数不匹配!!这句话让我对Qt中的信号与槽进一步有了了解. 下面的这个演示源码是基于这个博客的 https://b ...

  7. Qt的特性——信号和槽

    Qt的特性--信号和槽 1. Qt的特性 2. 信号和槽 2.1 信号和槽机制概述 2.2 典型应用示例 2.3 信号和槽的关联 2.4 断开关联 2.5 信号和槽的高级应用 1. Qt的特性 Qt在 ...

  8. 属性与意图识别_一种基于多任务学习的意图与槽位联合识别方法与流程

    本发明属于人机交互领域,涉及自然语言处理.垂直对话系统等,特别涉及一种基于多任务学习的意图与槽位联合识别方法. 背景技术: 意图识别和槽位识别可以将垂直对话系统中用户输入文本转化为语义表示,为系统采取 ...

  9. Qt学习笔记-----信号槽

    Qt提供signals and slots mechanism(信号槽机制)来保证两个对象之前的关联(connection). 所谓信号槽,简单理解就是两部分,一个是某对象发出的信号,一个是某对象接收 ...

最新文章

  1. 关于python语言的浮点数类型_Python 浮点数数据类型详解(float)[学习 Python 必备基础知识][看此一篇就够了]...
  2. [转]ubuntu系统瘦身-清理系统垃圾文件
  3. 在做自动化测试之前你需要知道的
  4. Django之HttpRequest和HttpReponse
  5. golang 在 windows 下编译出 linux 二进制可执行文件的软件套装合集 [go 1.7.3环境]
  6. 15.Linux/Unix 系统编程手册(上) -- 文件属性
  7. java8计算两个日期之间的天数
  8. idea 中文字体 自动变_提高工作效率,我推荐讯飞语记,瞬间语音秒变文字
  9. mysql数据库安装时的默认端口_数据库默认端口号
  10. 微软原版win10系统启动盘的制作
  11. 新媒传信Java_新媒小课堂——多媒体、流媒体、富媒体
  12. JS设置浏览器缩放比例
  13. 华清远见22071班10.13
  14. python ocr文字识别竖排繁体_繁体文字识别 ABBYY 与 千百OCR 使用比较
  15. 腕品视界:时尚百搭-GS浪琴名匠大嘴
  16. 几分钟教你批量重命名文件,批量更改数据的方法
  17. 京瓷1125打印机清零_京瓷打印一体机常见问题解答
  18. 将淘宝数据包导入自己的商城系统
  19. 6.47.2 Extended Asm - Assembler Instructions with C Expression Operands
  20. 数据库建模,概念模型、逻辑模型、物理模型的区别和转化

热门文章

  1. NVIDIA显卡驱动未加载问题——未完全解决
  2. 【Elasticsearch源码】 写入分析
  3. stm32H743can配置
  4. Linux之jar包运行常用命令
  5. JS正则表达式完整教程(略长)
  6. Windows下本机SSH的生成
  7. 大屏幕led无缝拼接显示屏的十大技术优势
  8. 2017大数据产业链的大变化:数据应用仍在奋斗 淘金路上见曙光
  9. 马上2021年了线性表你还不知道原理?给老王整的明明白白
  10. 家庭NAS服务器安装配置