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

长沙建网站速成班seo是什么品牌

长沙建网站速成班,seo是什么品牌,建立网站的技术,台州免费建站文章目录 简介信号槽信号与槽的连接 特点观察者模式定义观察者模式结构图 实现简单的信号和槽 简介 信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。  信号和槽机制是 Qt 的核心…

文章目录

  • 简介
    • 信号
    • 信号与槽的连接
  • 特点
  • 观察者模式
    • 定义
    • 观察者模式结构图
  • 实现简单的信号和槽

简介

 信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。
 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不相关的对象绑定在一起,实现对象之间的通信。

信号

 当对象改变其状态时,信号就由该对象发射 (emit) 出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号。这样就做到了真正的信息封装,能确保对象被当作一个真正的软件组件来使用。

 用于接收信号,而且槽只是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且对象并不了解具体的通信机制。

信号与槽的连接

 所有从 QObject 或其子类 ( 例如 Qwidget ) 派生的类都能够包含信号和槽。因为信号与槽的连接是通过 QObject 的 connect() 成员函数来实现的。

connect(sender, SIGNAL(signal), receiver, SLOT(slot));

 其中 sender 与 receiver 是指向对象的指针,SIGNAL() 与 SLOT() 是转换信号与槽的宏。

特点

1、一个信号可以连接多个槽

当信号发射时,会以不确定的顺序一个接一个的调用各个槽。

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

即无论是哪一个信号被发射,都会调用这个槽。

3、信号直接可以相互连接

发射第一个信号时,也会发射第二个信号。
4、连接可以被移除

这种情况用得比较少,因为在对象被删除时,Qt会自动移除与这个对象相关的所有连接。语法如下:

disconnect(sender, SIGNAL(signal), receiver, SLOT(slot));

观察者模式

定义

 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。

观察者模式结构图

在这里插入图片描述
在观察者模式中有如下角色:

1、Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。
2、ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知。
3、Observer:抽象观察者,是观察者者的抽象类,它定义了一个更新接口,使得在得到主题更改通知时更新自己。
4、ConcrereObserver:具体观察者,实现抽象观察者定义的更新接口,以便在得到主题更改通知时更新自身的状态。

实现简单的信号和槽

 为什么要说观察者模式呢?因为Qt的信号和槽就是基于这种设计模式来进行设计的。通过信号和槽将对发送者信号感兴趣的对象连接起来,当发送者的信号发送的时候,就会对这个列表进行遍历,这种方式类似于广播,不关心用户是否收到,只是进行发送而已。下面是实现方式。


#include <iostream>
#include <vector>
using namespace std;//槽函数类
template <class TParam>
class SlotBase
{
public:virtual void slotFuntion(TParam) = 0;virtual ~SlotBase() = default;
};template <class TReceiver,class TParam>
class Slot:public SlotBase<TParam>
{
private:TReceiver *m_preveiver;void (TReceiver::*m_func)(TParam);
public:Slot(TReceiver * reveiver,void(TReceiver::*func)(TParam)){m_preveiver = reveiver;m_func = func;}void slotFuntion(TParam param) override{(m_preveiver->*m_func)(param);}
};//信号类
template <class TParam>
class Signal
{
private:std::vector<SlotBase<TParam> *> signal_vector;
public:template <class TReceiver>void addSlot(TReceiver *reveiver,void(TReceiver::*func)(TParam)){signal_vector.push_back(new Slot(reveiver,func));}void operator()(TParam param){for(SlotBase<TParam> *p:signal_vector){p->slotFuntion(param);}}
};//两个测试的接受信号类
class Receiver1
{
public:void func1(int param){std::cout<<"这是Receiver1类中方法,参数为"<<param<<endl;}
};class Receiver2
{
public:void func2(int param){std::cout<<"这是Receiver2类中方法,参数为"<<param<<endl;}
};class SendObj
{
public:Signal<int> valueChanged;
public:void testSend(int value){valueChanged(value);}
};#define connect(send,signal,reveiver,slot) send->signal.addSlot(reveiver,slot)int main()
{SendObj *send=new SendObj;Receiver1 *r1 = new Receiver1;Receiver2 *r2 = new Receiver2;connect(send,valueChanged,r1,&Receiver1::func1);connect(send,valueChanged,r2,&Receiver2::func2);send->testSend(100);return 0;
}

在这里插入图片描述

http://www.ds6.com.cn/news/5812.html

相关文章:

  • 东莞做网站seo站内seo内容优化包括
  • 做电商网站一般要多少钱微信朋友圈广告投放
  • 日照机关建设网站运营网站是什么意思
  • 北京市城乡结合部建设领导小组办公室网站2019年度最火关键词
  • 临沂网站开发技术员新网站多久会被百度收录
  • 网站报价表对比表怎么做企业微信scrm
  • 10大最佳免费建站软件推荐如何制作微信小程序店铺
  • 辽宁响应式网站建设人民政府网站
  • 怎么做加密网站电商网站大全
  • 贵阳地铁建设网站会员营销
  • 找网站漏洞赚钱怎么做的bilibili官网网页入口
  • php做的网站缺点自己创建一个网站需要多少钱
  • 商城网站建设哪家便宜提高网站权重的方法
  • 震旦集团网站建设北京seo报价
  • 网络设计的步骤包括关键词优化报价查询
  • 网站html静态化解决方案全国唯一一个没有疫情的城市
  • 学做家常菜的网站深圳网络推广服务公司
  • 怎样做网站推广啊抖音电商产品推广方案
  • 开通独立网站网络设计
  • 先有域名才可以做网站吗宁波seo网络推广多少钱
  • 怎么做时时彩网站代理电工培训课程
  • 动态网站模板免费下载竞价推广账户托管费用
  • 营销建设网站制作谷歌优化的网络公司
  • 德州网站推广网址搜索域名查询
  • 店名logo在线制作免费淘宝seo排名优化
  • 英文网站的建设意义门户网站推广方案
  • 做网站卖资料线上推广产品
  • 义乌商城集团的网站建设西地那非片的功能主治和副作用
  • 网站说明书的详细说明武汉百度推广电话
  • 网站美工的重要性推广app赚佣金平台有哪些