/******************************************************
* 课程名 :QT编程
* 时 间 :2017年6月2日(周五)下午后半段
* 工程名 :07-signalSlot-2
* 类 名 : signaldialog2
* 内 容 :信号和槽
* CSDN :Qt基础 06_信号和槽(二) 自定义信号和槽的实例
******************************************************/
目标:新闻被发布,读者自动接收。
一、新闻部分
步骤一:添加一个“C++ Class”
步骤二:news.cpp中添加头文件#include < QObject >
步骤三:在News.h中添加属性
private:
QString _name ; //新闻发布者
QString _type ; //新闻类型
QString _content ; //新闻内容
步骤四:重载函数News
public:
explicit News(QObject *parent = 0);
//写一个重载函数
News(QString name ,QString type ,QString content , QObject *parent = 0):
_name(name),_type(type),_content(content),QObject(parent)
{}//参数列表
步骤五:定义信号
signals:
void newMessage(QString name ,QString type ,QString content ); //发送新闻
步骤六:定义发送新闻的函数
public:
void sendNews(void)
{
//发送新闻
emit newMessage(_name , _type , _content);
}
二、读者部分
步骤一:添加一个“C++ Class”Reader;
步骤二:在reader.h中添加属性
private:
QString _name ; //读者姓名
步骤三:构造函数改为:
explicit Reader(QString name , QObject *parent = 0);
并在Reader.cpp中:
Reader::Reader(QString name , QObject *parent) :
QObject(parent),_name(name)
{
}
步骤四:在reader.h中定义槽函数,并把接收到的信息打印在控制台
public slots:
void readMessage(QString name ,QString type ,QString content)
{
qDebug() << _name << "看了" << name << "发布的" << type << "新闻" ;
qDebug() << "新闻内容是" << content ;
}
三、创建新闻事件,发布后读者阅读
步骤一:包含头文件#include “news.h”和#include “reader.h”
步骤二:在main.cpp中:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
signaldialog1 w;
w.show();
News n1("腾讯新闻","体育新闻","篮球决赛");
News n2("新浪新闻","八卦新闻","明星事件");
News n3("网易新闻","科技新闻","手机发布");
Reader r1("reader1");
Reader r2("reader2");
//建立连接 —— 订阅新闻
//读者一:对1体育新闻感兴趣
QObject::connect(&n1,SIGNAL(newMessage(QString,QString,QString)),
&r1,SLOT(readMessage(QString,QString,QString)));
//读者一:对2八卦新闻感兴趣
QObject::connect(&n2,SIGNAL(newMessage(QString,QString,QString)),
&r1,SLOT(readMessage(QString,QString,QString)));
//读者二:对2八卦新闻感兴趣
QObject::connect(&n2,SIGNAL(newMessage(QString,QString,QString)),
&r2,SLOT(readMessage(QString,QString,QString)));
//读者二:对3科技新闻感兴趣
QObject::connect(&n3,SIGNAL(newMessage(QString,QString,QString)),
&r2,SLOT(readMessage(QString,QString,QString)));
//建立连接 —— 发布新闻
n1.sendNews();
n2.sendNews();
n3.sendNews();
return a.exec();
}