美文网首页Qt notebook
Qt5 - 3. 自定义信号&槽

Qt5 - 3. 自定义信号&槽

作者: QWERDF007 | 来源:发表于2019-05-25 20:22 被阅读0次

信号&槽是 Qt 的核心特性之一,Qt 允许我们自定义信号&槽,因此我们可以在 Qt 程序中定义我们自己的信号&槽。要使用信号&槽,必须继承 QObject,并且必须在类定义添加宏 Q_OBJECT,这个宏提供很多操作,具体待查。

使用 Qt 的信号&槽完成观察者模式,实现报纸与订阅者,实现一个 NewspaperSubscriber 类,Subscriber 订阅 Newspaper,当 Newspaper 出现新内容时通知 Subscriber

newspaperandsubscriber.h

#ifndef NEWSPAPERANDSUBSCRIBER_H
#define NEWSPAPERANDSUBSCRIBER_H

#include <QObject>

class Newspaper : public QObject
{
    Q_OBJECT
public:
    explicit Newspaper(const QString &name);
    void send(const QString &content);

signals:
    void NewContent(const QString &content);

public slots:

private:
    QString newspaper_name_;
};

class Subscriber : public QObject
{
    Q_OBJECT
public:
    explicit Subscriber();
    void ReceiveNewspaper(const QString &name);

signals:

public slots:
};

#endif // NEWSPAPERANDSUBSCRIBER_H

newspaperandsubscriber.cpp

#include "newspaperandsubscriber.h"
#include <QDebug>

Newspaper::Newspaper(const QString &name) : newspaper_name_(name)
{

}

void Newspaper::send(const QString &content)
{
    emit NewContent(newspaper_name_ + ": " + content);
}


Subscriber::Subscriber()
{

}

void Subscriber::ReceiveNewspaper(const QString &name)
{
    qDebug() << "Receive newspaper:" << name;
}

main.cpp

#include <QCoreApplication>
#include "newspaperandsubscriber.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Newspaper newspaper1("paper1");
    Newspaper newspaper2("paper2");
    Subscriber subscriber;
    QObject::connect(&newspaper1, &Newspaper::NewContent, &subscriber, &Subscriber::ReceiveNewspaper);
    QObject::connect(&newspaper2, &Newspaper::NewContent, &subscriber, &Subscriber::ReceiveNewspaper);
    newspaper1.send("??");
    newspaper2.send("...");
    newspaper1.send("what?");

    return a.exec();
}

效果:

result.png

相关文章

  • Qt5 - 3. 自定义信号&槽

    信号&槽是 Qt 的核心特性之一,Qt 允许我们自定义信号&槽,因此我们可以在 Qt 程序中定义我们自己的信号&槽...

  • 信号与槽(SIGNAL-SLOT)

    一、系统设置槽-信号 在QtCreator中建立槽信号事件 设置槽事件 设置信号事件 二、自定义槽信号事件 设置对...

  • QT5信号与槽

    QT5中信号与槽,如果需要使用,则需满足以下两点: 1、必须是QObject或其子类 2、必须在private里面...

  • QtCreator转换Qt5风格信号槽连接

    这一方法可以将Qt5版本以下旧式的信号槽连接转换为Qt5风格的连接。 使用方法 鼠标指向connect函数名; 右...

  • Chapter 1 Qt概述

    信号槽机制: 保证了信号发送方和接收方的解耦合,同时保证了参数安全, 虽然降低了效率(大约10倍). Qt5基于以...

  • Qt自定义信号槽

    自定义信号槽 关于Q_OBJECT宏 只有继承了QObject类的类,才具有信号槽的能力。所以,为了使用信号槽,必...

  • Qt5 - 2. 信号&槽

    Qt 中一个重要的机制就是信号与槽,理解和熟练使用信号与槽对于学好 Qt 非常有必要。先上码看看: 效果图: 注意...

  • PyQt信号与槽之信号与槽的入门应用(一)

    前言 信号与槽有三种使用方法第一种:内置信号与槽的使用第二种:自定义信号与槽的使用第三种:装饰器的信号与槽的使用 ...

  • QT5添加控件,信号和槽

    学习来自https://www.bilibili.com/video/av34085761?p=11添加控件的头文...

  • Qt学习-2.信号与槽

    信号与槽 连接函数书写 ①③为对象指针,分别为发起者与接收者。④等待②的信号被发出 自定义槽 MainWindow...

网友评论

    本文标题:Qt5 - 3. 自定义信号&槽

    本文链接:https://www.haomeiwen.com/subject/xmrzzqtx.html