Qt信號與槽 如何寫2個類,一個發送信號,一個接收並處理


題目:

假設要做2個類,一個類的值提供一個函數SetValue,當這個值發生變化時,假設>10就觸發告警調用B的函數;

 

-------------------------------------------

a.h

 

#pragma once
#include <QOBJECT>

class CA:public QObject
{
    Q_OBJECT
public:
    CA() {}
    ~CA() {}

    void DoSetValue(int c)
    {
        //qDebug() << "class a do set value and it will emit class to do b\r\n";
        printf("class a do set value and it will emit class to do b\r\n");
        printf("before emit onvaluechange\r\n");
        emit __OnAlarm(c);
        printf("after emit onvaluechange\r\n");
    }

signals:
    void __OnAlarm(int c);
};

  

b.h

#pragma once
#include <qobject.h>

class CB:public QObject
{
    Q_OBJECT
public:
    CB() {}
    ~CB() {}

    public slots:
    void OnAlarm(int c) 
    {
        printf("on value change on class b %d \r\n", c);
    }

};

  

#include <QtCore/QCoreApplication>


#include "CA.h"
#include "CB.h"
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    CA a;
    CB b;


    QObject::connect(&a, SIGNAL(__OnAlarm(int)), &b, SLOT(OnAlarm(int)));

    a.DoSetValue(100);



    return app.exec();
}

  

 如果對告警的處理有多個處理函數,多個處理類,那么可以做多個B,cb1, cb2,cb3.....然后全部鏈接再一起即可單個處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM