Qt基础 06_信号和槽(二)自定义信号和槽的实例

来源:互联网 发布:嘉嘉购物业软件 编辑:程序博客网 时间:2024/06/04 18:39

/******************************************************
* 课程名 :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();}

源代码:http://download.csdn.net/detail/c_estbon/9864708

原创粉丝点击