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


  • 相关阅读:
    jupyter notebook 远程连接访问服务器
    spark py4j.protocol.Py4JNetworkError: An error occurred while trying to conn
    cudart64_101.dll not found解决方法
    windows tensorflow无法下载Fashion-mnist的解决办法
    dataframe apply函数多个结果拆分给多列
    tensorflow安装
    pandas DataFrame中agg聚合后重命名列标题
    操作系统-第五章-进程调度
    操作系统-第四章-多线程编程
    操作系统-第三章-进程
  • 原文地址:https://www.cnblogs.com/LyndonMario/p/9326246.html
Copyright © 2011-2022 走看看