zoukankan      html  css  js  c++  java
  • 4.自定义信号槽

    具体实现一个自定义newspaper,reader的信号槽
    //!!! Qt5
    #include <QObject>
     
    ////////// newspaper.h
    class Newspaper : public QObject
    {
        Q_OBJECT
    public:
        Newspaper(const QString & name) :
            m_name(name)
        {
        }
     
        void send()
        {
            emit newPaper(m_name);
        }
     
    signals:
        void newPaper(const QString &name);
     
    private:
        QString m_name;
    };
     
    ////////// reader.h
    #include <QObject>
    #include <QDebug>
     
    class Reader : public QObject
    {
        Q_OBJECT
    public:
        Reader() {}
     
        void receiveNewspaper(const QString & name)
        {
            qDebug() << "Receives Newspaper: " << name;
        }
    };
     
    ////////// main.cpp
    #include <QCoreApplication>
     
    #include "newspaper.h"
    #include "reader.h"
     
    int main(int argc, char *argv[])
    {
        QCoreApplication app(argc, argv);
     
        Newspaper newspaper("Newspaper A");
        Reader reader;
        QObject::connect(&newspaper, &Newspaper::newPaper,
                         &reader,    &Reader::receiveNewspaper);
        newspaper.send();
     
        return app.exec();
    }


    自定义信号槽需要注意的事项:

    • 发送者和接收者都需要是QObject的子类(当然,槽函数是全局函数、Lambda 表达式等无需接收者的时候除外);
    • 使用 signals 标记信号函数,信号是一个函数声明,返回 void,不需要实现函数代码;
    • 槽函数是普通的成员函数,作为成员函数,会受到 public、private、protected 的影响;
    • 使用 emit 在恰当的位置发送信号;
    • 使用QObject::connect()函数连接信号和槽。


  • 相关阅读:
    130行C语言实现个用户态线程库(2)
    130行C语言实现个用户态线程库(1)
    用C语言模仿Python函数
    ES 2.4 bigdesk 安装失败解决方案.
    使用SqlBulkCopy, 插入整个DataTable中的所有数据到指定数据库中
    表A的数据减去表B ,最终得到表C
    关于把A表中的数据复制到B表中(整理)
    需求池整理
    app主流推广渠道
    流程图梳理
  • 原文地址:https://www.cnblogs.com/LyndonMario/p/9326246.html
Copyright © 2011-2022 走看看