• Qt中的signal和slots中的一些认识


    认识1:实现对象间的通信,a对象发射信号后调用b对象的槽函数。

    QObject::connect(PA,&A::signalA,PB,&B::B_slot);   //将信号与槽绑定,PA为类A对象指针,PB为类B对象指针.
    QObject::disconnect(PA,&A::signalA,PB,&B::B_slot);  //将信号与槽解绑定.
    #ifndef A_H
    #define A_H
    #include <QObject>
    class A :public QObject{
        Q_OBJECT
    public :
        static A* instance(){
            static A a;
            return &a;
        }
    public:
        void emitSignalA(){
            signalA();
        }
    signals:
        void signalA();
    };
    #define PA (A::instance())
    #endif // A_H
    #ifndef B_H
    #define B_H
    #include <QDebug>
    #include <QObject>
    
    class B:public QObject{
        Q_OBJECT
    public :
        static B* instance(){
            static B b;
            return &b;
        }
    public slots:
        void B_slot(){
            qDebug()<<"B_slot is called.";
        }
    };
    #define PB (B::instance())
    #endif // B_H
    #include <QCoreApplication>
    #include "a.h"
    #include "b.h"
    #include <QThread>
    class T:public QThread{
    public:
        void run(){
            PA->emitSignalA();
        }
    };
    int main(int argc, char *argv[]){
        QCoreApplication a(argc, argv);
        //A aa;
        //B bb;
        QObject::connect(PA,SIGNAL(signalA()),PB,SLOT(B_slot()));
        QObject::disconnect(PA,SIGNAL(signalA()),PB,SLOT(B_slot()));
        //PA->emitSignalA();
        T t;
        t.start();
    
        return a.exec();
    }

    场景1:对象a、对象b在主线程中,且signal也在主线程中emit ,则为同步的。

    场景2:对象a在子线程,对象b在主线程,a在子线程中emit,则为异步的。

    场景3:对象a、b均在主线程,a在线程中emit,则为异步的。

    带参数的信号
    connect(VideoPlayerThread, SIGNAL(sig_GetOneFrame(QImage)),this,SLOT(slotGetOneFrame(QImage)));


    信号:
    void iSignal(int b); 

    槽: 
    void MainWindow::iSlot(int b)  
    {      
      QString qString;     
      qDebug()<<qString.number(b); 


    信号和槽绑定:
    connect(this, SIGNAL(iSignal(int)), this, SLOT(iSlot(int))); 

     发送信号:

     emit iSignal(5);  



  • 相关阅读:
    Vue
    Vue
    Vue
    Vue
    Vue
    kubernetes
    kubernetes
    kubernetes
    django源码bug解决方案
    UNI-APP 桌面LOGO角标设置(ios)
  • 原文地址:https://www.cnblogs.com/mathyk/p/9487930.html
Copyright © 2020-2023  润新知