//connect 函数有4个参数 分别是 发送者 信号。接受者 ,槽
//connect(sender,signal,receiver,slot)
/*
* 信号和槽
* 信号 就是一个普通的函数 定义信号的时候需要在函数前面加上signals: ,不需要实现
* 槽 函数 在QT5中科院是类的任意成员函数,静态函数,全局函数 lambda 表达式
* QT4中槽函数的定义 public slots: void send();
* 信号和槽是可以自定义的
* 信号和槽是没有返回值的
* 信号和槽函数可以带参数
* 信号和槽函数的参数必须要一一对应的
* 信号和槽函数的参数可以是不一样的但是槽函数的参数个数可以少于信号的参数个数
* 信号槽函数传参数的数据类型:
* 先看QT4的
* connect(sender,SIGNAL(sig1(int,double,Qstring)),receiver,SLOT(slot1(int,double,Qstring)));
* SIGNAL 和SLOT 是两个宏 将函数转换成字符串
* 缺点 编译时不会做错误检查
* QT5中
* connect(sender,&sender::sig1,receiver,&receiver::slot1);
*/

//创建一个按钮对象
QPushButton * Lpbutton =new QPushButton;
//将按钮添加到主窗口中 设置按钮的父窗口句柄
Lpbutton->setParent(this);
//设置按钮的标题title
Lpbutton->setText("关闭窗口");
//信号和槽的简单实现
//qt5的方式
// connect(Lpbutton,&QPushButton::clicked,this,&MyWidget::close);
//Qt4的方式
connect(Lpbutton,SIGNAL(clicked(bool)),this,SLOT(close()));

自定义信号和槽函数的使用

创建两个类 一个报纸类一个读者类
报纸类先声明 信号和发送信号的函数
//然后我们定义一个发送信号的函数
void SendSignals();

signals:
//自定义一个信号
void signalFunc(); //没有返回值 不需要实现
然后 我们来实现发送信号的函数
void NewSpaper::SendSignals()
{
//这个函数的主要作用就是发送信号
//在QT中我们要发送信号的话需要用到关键字emit信号的函数名
emit signalFunc();
}
下面我们再来处理读者类的槽函数

public slots:
//读者类中我们需要自定义一个槽函数
void SlostFunc();
实现槽函数功能
void Reader::SlostFunc()
{
//我们来实现以下槽函数 这里需要用到 控制台打印调试信息所以我们需要用到
//一个QDebug类
qDebug() <<"我要去买报纸";
}
连接信号和槽函数
//创建读者类和报纸类
NewSpaper* NewSpa1 =new NewSpaper;
Reader* Read1 = new Reader;
//连接信号和槽
connect(NewSpa1,&NewSpaper::signalFunc,Read1,&Reader::SlostFunc);
//然后是发送信号
NewSpa1->SendSignals();

当然信号和槽函数在c++中是一个普通的函数 它也存在重载机制
下面我们来重载信号和槽函数
重载报纸的构造函数
explicit NewSpaper(QString name,QObject *parent = 0);
//重载信号
void signalFunc(QString name); //没有返回值 不需要实现
NewSpaper::NewSpaper(QString name,QObject *parent) : QObject(parent)
{
Qs_name = name;
}
void NewSpaper::SendSignals()
{
//这个函数的主要作用就是发送信号
//在QT中我们要发送信号的话需要用到关键字emit信号的函数名
emit signalFunc();
emit signalFunc(Qs_name);

}
重载读者的槽函数
//重载槽函数
void SlostFunc(QString name);
//重载槽函数
void Reader::SlostFunc(QString name)
{
qDebug() <<"我要去买:"<<name.toStdString().c_str();
}
Reader* Read1 = new Reader;
NewSpaper* NewSpa2 =new NewSpaper("人民日报"); //重载信号函数
//连接信号和槽
// connect(NewSpa1,&NewSpaper::signalFunc,Read1,&Reader::SlostFunc);
//QT4方式实现重载信号槽函数的连接
// connect(NewSpa2,SIGNAL(signalFunc(QString)),Read1,SLOT(SlostFunc(QString)));
//QT5方式实现重载信号槽函数的连接 主要是用到类型转换 函数指针转换即可
connect(NewSpa2,static_cast<void (NewSpaper::*)(QString)>(&NewSpaper::signalFunc),Read1,static_cast<void (Reader::*)(QString)>(&Reader::SlostFunc));
//然后是发送信号
NewSpa2->SendSignals();

QT中信号和槽的扩展
//信号和槽的扩展
/*
* 一个信号可以连接多个槽函数
* 槽函数的执行顺序是随机的无法控制
* 一个槽函数可以同时被多个信号连接
* 槽函数可以使用lambda表达式
* 信号可以连接信号可以接力
* 先连接第一个信号槽
* connect(NewSpa2,static_cast<void (NewSpaper::*)()>(&NewSpaper::signalFunc),Read1,static_cast<void (Reader::*)()>(&Reader::SlostFunc));
* 然后再连接第二个信号槽
* connect(Lpbutton,&QPushButton::clicked,NewSpa2,static_cast<void (NewSpaper::*)()>(&NewSpaper::signalFunc));
* 信号槽连接之后可以被断开。可以使用disconnect函数断开
*
*/

QT信号和槽函数学习笔记的更多相关文章

  1. Qt 信号和槽函数

    信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性.当某个信号被发射,就需要调用与之相绑定的槽函数.这与Windows下的消息机制类似,消息机制是基于回调函数.一个回调即是一个函数的 ...

  2. QT+信号和槽函数_自定义槽函数_一个信号对应多个槽函数

    以下的代码里面有自定义槽函数的内容,同时也有信号实现的函数: #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #i ...

  3. qt的信号与槽函数

    关联: bool connect ( const?QObject?*?sender, const?char?*?signal, const QObject * receiver, const char ...

  4. 【QT】无需写connect代码关联信号和槽函数

    对于一些简单的事件判别,如点击按钮. 无需写代码关联信号和槽函数. connect(ui->Btnshowhello,SIGNAL(clicked(bool)),this,SLOT(Btnsho ...

  5. Qt之自定义信号和槽函数

    自定义信号和槽函数: 1.类的声明和实现分别放在.h和.cpp文件中: 2.类声明包含Q_OBJECT宏: 3.信号只要声明不要设计其的实现函数 4.发射信号用emit关键字 5.自定义槽的实现与普通 ...

  6. QT 信号与槽connect

    QT 信号与槽connect QT 信号与槽connect connect函数调用几个限制 connect函数代码 QT中信号与槽的连接使用的connect函数是一个静态函数,在类QObject中定义 ...

  7. QT 信号与槽连接

    转帖 http://www.cnblogs.com/cnhome/archive/2009/10/01/1577277.html 信号(SIGNAL)和槽(SLOT)是Qt编程的一个重要部分.这个机制 ...

  8. Qt 信号与槽

    Qt信号与槽的理解 信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解.信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重 ...

  9. QT 信号与槽 QT简单加法器的实现

    信号与槽 背景: 面向过程 模块之间低耦合设计(高内聚). 函数调用: 直接调用 回调调用(低耦合) 面向对象 模块之间低耦合设计(高内聚) 对象调用 直接调用 接口调用 QT: 信号与槽解决问题: ...

随机推荐

  1. @codechef - MXMN@ Maximum and Minimum

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 定义函数 f(G, x, y) 为 G 中点 x 和点 y 之间 ...

  2. PHP 手机短信验证码 laravel 实现流程

    https://blog.csdn.net/uknow0904/article/details/80336941 本人在自己博客(Laravel)的注册部分 使用手机号注册,需要发送短信验证码. 使用 ...

  3. 解决bootStrap selectpicker 下拉栏上方弹出

    最近项目中遇到了一个使用bootStrap selectpicker 进行下拉栏展示的时候出现在元素上方弹出展示的问题,可把我难受坏了,和测试互怼最终以失败告终(人家还是一个娇滴滴的小姑娘),在查了a ...

  4. Open Source Projects Released By Google

    Open Source Projects Released By Google Google has released over 20 million lines of code and over 9 ...

  5. H3C 分组交换连接模型

  6. SuperSocket 服务管理器 (ServerManager)

    什么 SuperSocket 服务管理器? SuperSocket 服务管理器是一个让你能够在客户中用图形化界面来管理和监控你的SuperSocket服务器程序的组件. 在服务器端配置服务器管理器 事 ...

  7. 如何查看redis内存使用情况

    https://jingyan.baidu.com/article/2c8c281dbd079f0008252a0f.html Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以 ...

  8. 7种最常见的Hadoop和Spark项目

    7种最常见的Hadoop和Spark项目 如果您的Hadoop项目将有新的突破,那么它必定与下边介绍的七种常见项目很相像. 有一句古老的格言是这样说的,如果你向某人提供你的全部支持和金融支持去做一些不 ...

  9. canvas.toDataURL 由于跨域报错的解决方法

    关于canvas.toDataURL 由于跨域报错的解决方法 用过canvas,都知道toDataURL这个方法真好用,不仅合成图片用到它,压缩图片也用到它.但有一个问题,就是图片源不能跨域,不然会报 ...

  10. mpvue的坑,持续更新-.-

    mpvue... 坑 怎么说呢,去github看一下,发现还是有很多问题没有解决... 不支持filter 亲,到现在还没有支持filter哦.只能用替代方法了,用computed或者渲染前先处理数据 ...