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()函数连接信号和槽。


  • 相关阅读:
    Jsの练习-将 数组中值为0 的去掉,不为0的存入一个新的数组
    Jsの数组练习-求一组数中的最大值和最小值,以及所在位置
    ES6-解构赋值
    vue初体验-ES6 基础知识补充 let 和const
    2D过渡模块的其他属性
    CSS学习笔记-05 过渡模块的基本用法
    echarts笔记
    不可思议的纯 CSS 滚动进度条效果
    十大排序算法
    关于input上传文件
  • 原文地址:https://www.cnblogs.com/LyndonMario/p/9326246.html
Copyright © 2011-2022 走看看