QT信号和槽函数学习笔记
//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信号和槽函数学习笔记的更多相关文章
- Qt 信号和槽函数
信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性.当某个信号被发射,就需要调用与之相绑定的槽函数.这与Windows下的消息机制类似,消息机制是基于回调函数.一个回调即是一个函数的 ...
- QT+信号和槽函数_自定义槽函数_一个信号对应多个槽函数
以下的代码里面有自定义槽函数的内容,同时也有信号实现的函数: #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #i ...
- qt的信号与槽函数
关联: bool connect ( const?QObject?*?sender, const?char?*?signal, const QObject * receiver, const char ...
- 【QT】无需写connect代码关联信号和槽函数
对于一些简单的事件判别,如点击按钮. 无需写代码关联信号和槽函数. connect(ui->Btnshowhello,SIGNAL(clicked(bool)),this,SLOT(Btnsho ...
- Qt之自定义信号和槽函数
自定义信号和槽函数: 1.类的声明和实现分别放在.h和.cpp文件中: 2.类声明包含Q_OBJECT宏: 3.信号只要声明不要设计其的实现函数 4.发射信号用emit关键字 5.自定义槽的实现与普通 ...
- QT 信号与槽connect
QT 信号与槽connect QT 信号与槽connect connect函数调用几个限制 connect函数代码 QT中信号与槽的连接使用的connect函数是一个静态函数,在类QObject中定义 ...
- QT 信号与槽连接
转帖 http://www.cnblogs.com/cnhome/archive/2009/10/01/1577277.html 信号(SIGNAL)和槽(SLOT)是Qt编程的一个重要部分.这个机制 ...
- Qt 信号与槽
Qt信号与槽的理解 信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解.信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重 ...
- QT 信号与槽 QT简单加法器的实现
信号与槽 背景: 面向过程 模块之间低耦合设计(高内聚). 函数调用: 直接调用 回调调用(低耦合) 面向对象 模块之间低耦合设计(高内聚) 对象调用 直接调用 接口调用 QT: 信号与槽解决问题: ...
随机推荐
- 9-1进程,进程池和socketserver
一 进程: # 什么是进程 : 运行中的程序,计算机中最小的资源分配单位# 程序开始执行就会产生一个主进程# python中主进程里面启动一个进程 —— 子进程# 同时主进程也被称为父进程# 父子进程 ...
- 异常处理之多重catch
package com.sxt.exception.test1; import java.util.InputMismatchException; import java.util.Scanner; ...
- 洛谷P2512 [HAOI2008]糖果传递
//不开long long见祖宗!!! #include<bits/stdc++.h> using namespace std; long long n,ans,sum; ],s[]; i ...
- H3C 命令级别
- 学习微信小程序
1.从小程序指南文档开始看起:小程序指南 2.开发者工具下载:小程序开发工具
- 解析P2P金融的业务安全
看了很多乙方同学们写的业务安全,总结下来,其出发点主要是在技术层面风险问题.另外捎带一些业务风险.今天我要谈的是甲方眼里的业务安全问题,甲方和乙方在业务安全的视野上会有一些区别和一些重合.在同一个问题 ...
- C++第5次作业
运算符重载 定义 - 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同行为. 运算符重载规则 - C++运算符除了少数几个,全都可以重载,且只能重载C++已有的运算 ...
- Educational Codeforces Round 11、A B题
A. Co-prime Array 题意:给你一个数列,要求构造两两相邻之间的数互质的数列,可以插入的数的小于10的9次方 思路:其实可以选择靠近10的9次方的最大的三个素数.然后按我下面的方法做就可 ...
- iptables [-t table] 指定规则表
-t 参数用来,内建的规则表有三个,分别是:nat.mangle 和 filter,当未指定规则表时,则一律视为是 filter.个规则表的功能如下: nat:此规则表拥有 PREROUTING 和 ...
- Beta版是什么意思
外部测试版的意思. 软件会出现三种版本 1.alpha内部测试版本,极不稳定,一般也不会出现的公众视线,仅供内部测试人员测试用. 2.beta公共测试版,就是对外发布软件的测试版,收集公众的意见和建议 ...