//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. qt painter多个点的曲线

    plot.h #ifndef PLOT_H #define PLOT_H #include<QTimer> #include <QWidget> class pathplot ...

  2. Mysql 数据库优化(一)

    一 避免网页访问错误 1  数据库连接timeout产生页面5xx错误 2 慢查询造成页面无法加载 3 阻塞造成数据无法提交 二 增加数据库的稳定性 三 优化用户体验 1 流畅的页面访问速度 2 良好 ...

  3. Java帮助文档打开索引就停止服务

    cmd: regsvr32 jscript.dllregsvr32 hhctrl.ocxregsvr32 itss.dllregsvr32 itircl.dll

  4. day8_python网络编程(实验版本)

    1.简单的套接字通信 1.1.服务端 import socket # 买手机 phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 插 ...

  5. PHP会话技术

    由于HTTP协议是无连接.无状态的,所以HTTP协议无法记住客户端的信息.为了弥补HTTP协议的这两种不足,所以出现了会话技术. 1 Cookie技术 1.1 什么是Cookie 服务器端,将能够唯一 ...

  6. Laravel 上传excel,读取并写入数据库 (实现自动建表、存记录值

    <?php namespace App\Http\Controllers; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminat ...

  7. Window setTimeout() 方法

    定义和用法 setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 注意:如果你只想重复执行可以使用 setInterval() 方法. 可以使用clearTimeout()方法来阻 ...

  8. Python学习--not语句

    布尔型True和False,not True为False,not False为True,以下是几个常用的not的用法: (1) not与逻辑判断句if连用,代表not后面的表达式为False的时候,执 ...

  9. poj 2451 Uyuw's Concert (半平面交)

    2451 -- Uyuw's Concert 继续半平面交,这还是简单的半平面交求面积,不过输入用cin超时了一次. 代码如下: #include <cstdio> #include &l ...

  10. pytorch中squeeze()和unsqueeze()函数介绍

    一.unsqueeze()函数 1. 首先初始化一个a 可以看出a的维度为(2,3) 2. 在第二维增加一个维度,使其维度变为(2,1,3) 可以看出a的维度已经变为(2,1,3)了,同样如果需要在倒 ...