当前位置: 首页 > news >正文

重庆做网站的网络公司贴吧推广

重庆做网站的网络公司,贴吧推广,网站制作好以后怎么管理,国外ip地址怎么弄第二天 2.1自定义信号和槽 新建一个Qtclass 自定义信号:返回值是void ,只需要声明,不需要实现,可以有参数,可以重载 自定义槽:返回值void ,需要声明,也需要实现,可以有…

第二天

2.1自定义信号和槽

新建一个Qtclass

在这里插入图片描述

自定义信号:返回值是void ,只需要声明,不需要实现,可以有参数,可以重载

自定义槽:返回值void ,需要声明,也需要实现,可以有参数,可以发生重载

首先新建学生和老师的类。在老师的头文件中添加自定义信号,将代码写在signals:下来实现自定义信号(只需要声明不需要实现)

class Teacher  : public QObject
{Q_OBJECT
public:Teacher(QObject *parent);~Teacher();
//自定义信号写到signals下
//返回值是void ,只需要声明,不需要实现
//可以有参数,可以重载
signals:void hungry();
};

在学生类里定义槽返回值void ,需要声明,也需要实现可以有参数,可以发生重载。

class Student  : public QObject
{
public:Student(QObject *parent);~Student();
public slots://返回值void ,需要声明,也需要实现//可以有参数,可以发生重载void treat();
};void Student::treat()
{qDebug("请老师吃饭");
}

现在weidet头文件里新建老师和学生的指针,在到cpp里把他们实例化绑定到父类加入对象树,并且使用connect进行连接。光有连接还不行(=必须要先连接在调用=),需要调用的时机,使用emit来定义触发的时机。写完后就能在输出里看到打印了这段文字。

#include <QtWidgets/QWidget>
#include "ui_widget.h"
#include "Teacher.h"
#include "Student.h"class widget : public QWidget
{Q_OBJECT
public:widget(QWidget *parent = nullptr);~widget();
private:Ui::widgetClass ui;//先申明两个指针Teacher* te;Student* st;//声明调用函数void classisover();
};#include "widget.h"widget::widget(QWidget *parent): QWidget(parent)
{ui.setupUi(this);//创建一个老师对象,右边的this是设置父类加入对象树this->te = new Teacher(this);//创建一个学生对象this->st = new Student(this);//搭建连接,要先连接在传递信号connect(te,&Teacher::hungry,st,&Student::treat);classisover();
}widget::~widget()
{}void widget::classisover()
{//下课函数,调用后出发老师饿了的信号emit te->hungry();
}

2.2 重载信号和槽

在老师头文件重载hungry函数为void hungry(QString foodname)信号只需要声明不需要实现。

在学生头文件重载 ​treat​ 函数,并实现食物名。后边加toUtf8().data()是因为不加的话字符串输出有引号

void Student::treat(QString foodname)
{//QString -> char *先砖成QByteArray(.toutf8())再转char * (.data())qDebug()<<"请老师吃饭"<<foodname.toUtf8().data();
}

此时需要修改调用函数加入食物名称,connect找不到该连接的函数,应为没有指定哪个重载。需要用下边的方式来使用函数指针指向你想连接的函数重载

//连接到带参数的信号和槽
//函数指针指向函数地址
void (Teacher:: *teacherSignal)(QString) = &Teacher::hungry;
void (Student:: *studentSlot)(QString) = &Student::treat;connect(te, teacherSignal, st, studentSlot);
classisover();void widget::classisover()
{//下课函数,调用后出发老师饿了的信号emit te->hungry("gongbaojiding");
}

2.3 信号连接信号

1、信号是可以连接信号

2、一个信号可以连接多个槽函数

3、多个信号可以连接同一个槽函数

4、信号和槽函数的参数必须类型——对应

5、信号和槽的参数个数﹑是不是要一致?信号的参数个数可以多余槽函数的参数个数(按钮的点击是bool一个参数,所以只能用空的函数重载去连接信号)

还可以使用按钮来触发这个信号,点击就会触发

//点击一个按钮下课
QPushButton* btn = new QPushButton("下课",this);
this->resize(600,400);//点击按钮,下课
connect(btn,&QPushButton::clicked,this,&widget::classisover);

使用信号连接信号,无参信号和槽连接,相当于点击信号触发老师信号,老师信号又触发学生请客的信号,三者关联起来了

在这里插入图片描述

//无参信号和槽连接
//连接到带参数的信号和槽
//函数指针指向函数地址
void (Teacher:: * teacherSignal)(void) = &Teacher::hungry;
void (Student:: * studentSlot)(void) = &Student::treat;
connect(te, teacherSignal, st, studentSlot);//信号连接信号
connect(btn, &QPushButton::clicked, te, teacherSignal);

2.4 lambda表达式

5.4版本之前要使用Lambda,需要在.pro文件处添加这么一行代码CONFIG += C++11\

http://www.shuangfujiaoyu.com/news/54997.html

相关文章:

  • 学做网站产品如何做网络推广
  • 经营性网站备案条件关键词有哪几种
  • 网站建设教学点上海最专业的seo公司
  • 学校网站建设板块分析seo提升关键词排名
  • 珠海科技网站建设人工智能培训一般多少钱
  • wordpress文章置顶插件baike seotl
  • 重庆建站模板源码百度推广怎么做步骤
  • 有没有做武棍的网站河北seo基础教程
  • 石家庄学做网站建设培训班网站为什么要做seo
  • 行业网站分类如何提高网站搜索排名
  • seo网络营销的技术seo线上培训机构
  • 怎么制作网站卖电子文件seo关键词推广话术
  • 网站建设 51下拉平台沈阳seo优化新势力
  • 六安网站建设价格免费网站制作教程
  • 园林设计网站大全整站seo排名要多少钱
  • 如何做团购网站中的美食地处地图功能永久免费的网站服务器有哪些软件
  • 电子商务网站建设过程报告推广普通话手抄报文字内容
  • 梧州做网站推广赚钱的平台
  • 推广收款码平台有哪些谈谈对seo的理解
  • 外贸平台营销方案seo专业技术培训
  • wordpress写入权限seo网站排名软件
  • 汕头市住房城乡建设委官方网站最近新闻头条最新消息
  • 用ps做网站画布一般建多大seo快速优化排名
  • 微信小程序下单怎么弄商家3步打造seo推广方案
  • 三亚网站怎么制作西安seo优化工作室
  • 网站建设天津长沙推广引流
  • 网页设计作品代码在哪里找海外广告优化师
  • 做搬家网站推广在那好网络推广应该怎么做啊
  • 快速做网站服务好漯河seo公司
  • 如何将下载好的网站模板用到织梦程序上邢台网站公司