//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. @bzoj - 3836@ [Poi2014]Tourism

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个n个点,m条边的无向图,其中你在第i个点建立旅游站点的费 ...

  2. 手机QQ浏览器属于代理服务器吗?

    这两天.上QQ,会员上线提示.老是显示福建省,而没有具体的地方.这是怎么回事呢?而且那个时间段我都没有上QQ.但是有用手机QQ浏览器.偷菜.这是怎么回事,机子也没有病毒 没有木马 到底怎么搞的...! ...

  3. POJ 2488 深搜dfs、

    题意:模拟国际象棋中马的走棋方式,其实和中国象棋的马走的方式其实是一样的,马可以从给定的方格棋盘中任意点开始,问是否能遍历全部格子,能的话输出字典序最小的走棋方式,否则输出impossible 思路: ...

  4. java什么是方法的重载(Overload)

    概念:        在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型或参数顺序不同即可. 存在的原因: 屏蔽了一个对象的同一类方法由于参数不同所造成的差异. 特点: 与返回值 ...

  5. Java开发之快捷键

    1.显示桌面快捷键:win+D或者右击状态栏,选择显示桌面. 2.UE编辑器:如果想把多行记录合并为一行,使用替换(Ctrl+R),查找里输入^p(代表回车换行符),替换为里什么都不填,替换位置选择所 ...

  6. 【u212】&&【t036】最大和

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] N个数围成一圈,要求从中选择若干个连续的数(注意每个数最多只能选一次)加起来,问能形成的最大的和. [ ...

  7. H3C 路由环路

  8. P1016 高精度除法

    题目描述 给你两个很大的正整数A和B,你需要计算A除以B的商和余数. 输入格式 输入一行包含两个正整数A和B,以一个空格分隔(A和B的位数都不超过 \(10^5\)) 输出格式 输出一行包含两个整数, ...

  9. TransactionDefinition接口中定义了七个事务传播行为

    1.PROPAGATION_REQUIRED如果存在一个事务,则支持当前事务,如果没有事务则开启一个新的事务.使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在 ...

  10. ios设备iframe无法滚动

    在使用IFRAME,你需要使用一个元素(如DIV)来包装他们 <div class="scroll-wrapper"> <iframe src="&qu ...