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

/******************************************************
* 课程名 :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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值