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

西宁市建设网站企业石家庄疫情最新情况

西宁市建设网站企业,石家庄疫情最新情况,建设好网站的在线沟通功能,医院营销型网站建设重载的信号槽 函数指针: int fun(int a,long b) int (*funp)(int, long) fun; 实现回调函数就需要函数指针 信号重载 派生类槽函数发送两个信号 派生类给父类发两个信号 void (SubWidget::*mysigsub)() &SubWidget::sigSub;connect(&subw,mysigsub,t…

重载的信号槽

函数指针:

int fun(int a,long b)

int (*funp)(int, long) = fun;

实现回调函数就需要函数指针

信号重载

在这里插入图片描述

派生类槽函数发送两个信号

在这里插入图片描述

派生类给父类发两个信号

在这里插入图片描述

    void (SubWidget::*mysigsub)() = &SubWidget::sigSub;connect(&subw,mysigsub,this,&MainWidget::slotShowMe);void (SubWidget::*mysigsub1)(int,QString) = &SubWidget::sigSub;connect(&subw,mysigsub1,this,&MainWidget::slotSubMsg);
void MainWidget::slotSubMsg(int number, QString str)
{qDebug()<<number<<str;
}

既然QT4在函数重载这么好用,为什么不用?

自定义信号槽必须声明
在这里插入图片描述

拓展:

一个信号可以和多个槽相连

如果是这种情况,这些槽会一个接一个的被调用,但是槽函数调用顺序是不确定的。像上面的例子,可以将一个按钮点击信号连接到关闭窗口的槽函数,同时也连接到学生请吃饭的槽函数,点击按钮的时候可以看到关闭窗口的同时也学生请吃饭的log也打印出来。

多个信号可以连接到一个槽

只要任意一个信号发出,这个槽就会被调用。如:一个窗口多个按钮都可以关闭这个窗口。

一个信号可以连接到另外的一个信号

当第一个信号发出时,第二个信号被发出。除此之外,这种信号-信号的形式和信号-槽的形式没有什么区别。注意这里还是使用connect函数,只是信号的接收者和槽函数换成另一个信号的发送者和信号函数。

//必须使用函数指针解决重载问题
void (SubWidget::*mysigsub)() = &SubWidget::sigSub;
connect(bt2,&QPushButton::pressed,this,mysigsub);
通过上面的函数,也实现了最终结果
也就是第一个信号发出时,第二个信号也被发出。

在这里插入图片描述

槽函数可以使用lambda表达式

完整代码

mainwidget.cpp

#include "mainwidget.h"
#include <QDebug>MainWidget::MainWidget(QWidget *parent): QWidget(parent)
{this->setFixedSize(400,400);this->setWindowTitle("QQ登陆");this->setWindowIcon(QIcon("/home/yangyu/DailyFILE/picture/52.jpg"));b3 = new QPushButton("登陆",this);b3->resize(80,40);b3->move(300,350);connect(b3,&QPushButton::clicked,this,&MainWidget::slotHideMe);void (SubWidget::*mysigsub)() = &SubWidget::sigSub;connect(&subw,mysigsub,this,&MainWidget::slotShowMe);void (SubWidget::*mysigsub1)(int,QString) = &SubWidget::sigSub;connect(&subw,mysigsub1,this,&MainWidget::slotSubMsg);b4 = new QPushButton("注册",this);b4->resize(80,40);b4->move(20,350);connect(b4,&QPushButton::clicked,this,&MainWidget::slotHideMe_login);connect(&logw,&loginwidget::loginsignal,this,&MainWidget::slotShowMe_login);
}MainWidget::~MainWidget()
{}
void MainWidget::slotForMainWidget()
{b2->setText("注销");
}
void MainWidget::slotHideMe()
{//隐藏自己,显示QQ邮箱this->hide();subw.show();
}void MainWidget::slotShowMe()
{show();subw.hide();
}
void MainWidget::slotHideMe_login()
{//隐藏自己,显示QQ邮箱this->hide();logw.show();
}
void MainWidget::slotShowMe_login()
{show();logw.hide();
}
void MainWidget::slotSubMsg(int number, QString str)
{qDebug()<<number<<str;
}

subwidget.cpp

#include "subwidget.h"SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{          //相当于主窗口的一个子窗口bt1 = new QPushButton(this);bt1->setText("确认");bt1->resize(0,350);bt2 = new QPushButton(this);bt2->setText("退出");bt2->resize(80,40);bt2->move(300,350);this->setWindowTitle("QQ邮箱");this->setFixedSize(400,400);this->setWindowIcon(QIcon("/home/yangyu/DailyFILE/picture/58.jpg"));connect(bt2,&QPushButton::pressed,this,&SubWidget::MySlot);}
SubWidget::~SubWidget()
{}
void SubWidget::MySlot()
{//隐藏自己,显示QQ邮箱emit sigSub();//发送信号emit sigSub(520,"666");//发送信号
}

subwidget.h

#ifndef SUBWIDGET_H
#define SUBWIDGET_H#include <QWidget>
#include <QPushButton>class SubWidget : public QWidget
{Q_OBJECT
public:explicit SubWidget(QWidget *parent = nullptr);~SubWidget();signals:void sigSub();void sigSub(int num,QString str);public slots://自定义槽函数void MySlot();//void MySlot1();
private:QPushButton *bt1;//(确认)QPushButton *bt2;//(退出)隐藏自己,显示QQ登陆
};#endif // SUBWIDGET_H

mainwidget.cpp

#ifndef MAINWIDGET_H
#define MAINWIDGET_H#include <QWidget>
#include <QPushButton>
#include "subwidget.h"
#include "loginwidget.h"class MainWidget : public QWidget
{Q_OBJECTpublic:MainWidget(QWidget *parent = 0);~MainWidget();//自定义槽函数void slotForMainWidget();void slotHideMe();void slotShowMe();void slotHideMe_login();void slotShowMe_login();void slotSubMsg(int number,QString str);
private:QPushButton* b1;QPushButton* b2;QPushButton* b3;//(登陆)隐藏自己显示QQ邮箱QPushButton* b4;//(注册)隐藏自己显示QQ注册SubWidget subw;loginwidget logw;
};#endif // MAINWIDGET_H

loginwidget.cpp

#include "loginwidget.h"loginwidget::loginwidget(QWidget *parent) : QWidget(parent)
{bt1 = new  QPushButton(this);bt1->resize(80,40);bt1->setText("返回");bt1->move(300,350);this->setWindowTitle("QQ注册");this->setFixedSize(400,400);connect(bt1,&QPushButton::pressed,this,&loginwidget::loginslots);this->setWindowIcon(QIcon("/home/yangyu/DailyFILE/picture/50.jpg"));}
void loginwidget::loginslots()
{emit loginsignal();//发送自定义信号
}

loginwidget.h

#ifndef LOGINWIDGET_H
#define LOGINWIDGET_H#include <QWidget>
#include <QPushButton>
class loginwidget : public QWidget
{Q_OBJECT
public:explicit loginwidget(QWidget *parent = nullptr);signals://自定义信号void loginsignal();public slots://自定义槽函数void loginslots();private:QPushButton *bt1;//上一页
};#endif // LOGINWIDGET_H

最终效果

在这里插入图片描述

槽函数做lambda表达式

不需要考虑太多,按照下面写

  connect(b3,&QPushButton::clicked,this,[=](){b4->setText("lambda");});

如果槽函数很复杂,那就建议使用槽函数。

如果比较简单,可以使用lambda表达式

http://www.hkea.cn/news/186976/

相关文章:

  • 做网站有了空间在备案吗百度权重高的网站有哪些
  • 做空间的网站著名的网络营销案例
  • 做网站客户尾款老不给怎么办百度推广年费多少钱
  • 想要将网站信息插到文本链接怎么做百度关键词搜索
  • 江苏网站备案要多久seo域名综合查询
  • 大型网站建设机构津seo快速排名
  • 建设证件查询官方网站宁波做网站的公司
  • 那些网站招聘在家里做的客服网店推广策略
  • 湘西 网站 建设 公司sem代运营托管公司
  • 用css为wordpress排版西安seo外包服务
  • vs2005做网站百度推广官方网站登录入口
  • 乐从网站建设公司北京seo优化推广
  • 如何在网上接做网站的小项目市场监督管理局电话
  • 淘宝购物站优化
  • 石家庄最新疫情轨迹河南网站优化公司哪家好
  • 网站色彩搭配服务器ip域名解析
  • 哪个网站专业做安防如何注册域名网站
  • 穆棱市住房和城乡建设局网站关键词词库
  • 成都网站建设市场什么是网络营销的核心
  • 深圳找人做网站廊坊优化外包
  • 衡阳市城市建设投资有限公司网站湖南企业seo优化报价
  • css做网站常用百度权重优化软件
  • 合合肥网站建设制作网站用什么软件
  • 杭州网站设计公司推荐网络推广与优化
  • 移动惠生活app下载网址荆门网站seo
  • 做网站很赚钱吗关键词自助优化
  • wordpress小工具里的用户中心南京谷歌优化
  • 网站开发中茶叶网络营销策划方案
  • 临海市住房与城乡建设规划局 网站目前最新的营销模式有哪些
  • 高校建设网站的特色如何建立一个网站