0
点赞
收藏
分享

微信扫一扫

Qt不同类之间建立信号槽,并传递参数


Qt系列文章目录

文章目录

  • ​​Qt系列文章目录​​
  • ​​前言​​
  • ​​一.A类:TestA​​
  • ​​1.头文件和实现文件​​
  • ​​三 C类:控制A和B的类​​
  • ​​四 调用类​​
  • ​​源码下载​​

前言

最近遇到这种情况:假设有3个类:A,B,C
A类和B类之间相互传递数据,而C类负责控制A类和B类,换句话说,C类管理着A类和B类。
Qt不同类之间建立信号槽,并传递参数

一.A类:TestA

1.头文件和实现文件

#ifndef TESTA_H
#define TESTA_H

#include <QObject>

class TestA : public QObject
{
Q_OBJECT
public:
explicit TestA(QObject *parent = nullptr);
void emitDataFromTestA();

signals:
void sendDataFromTestA(const char* data);
public slots:
void recvDataAtTestA(const char* data);

};

#endif // TESTA_H


```cpp
#include "TestA.h"
#include <QDebug>

TestA::TestA(QObject *parent) : QObject(parent)
{

}

void TestA::emitDataFromTestA()
{
const char* name = "Data from testA";
emit sendDataFromTestA(name);
}

void TestA::recvDataAtTestA(const char *data)
{
// QString print = data;
// qDebug() << print.toLatin1();
qDebug() << "TestA class recive data:" << data;
}




# 二、B类:TestB

```cpp
#ifndef TESTB_H
#define TESTB_H

#include <QObject>

class TestB : public QObject
{
Q_OBJECT
public:
explicit TestB(QObject *parent = nullptr);
void emitDataFromTestB();
signals:
void sendDataFromTestB(const char* data);
public slots:
void recvDataAtTestB(const char* data);

};

#endif // TESTB_H

#include "TestB.h"
#include <QDebug>

TestB::TestB(QObject *parent) : QObject(parent)
{

}

void TestB::emitDataFromTestB()
{
const char* name = "Data from testB";
emit sendDataFromTestB(name);

}

void TestB::recvDataAtTestB(const char *data)
{
qDebug() << "TestB class recive data:" << data;
}

三 C类:控制A和B的类

#ifndef CONTROL_H
#define CONTROL_H

#include <QObject>
#include "TestA.h"
#include "TestB.h"

class Control : public QObject
{
Q_OBJECT
public:
explicit Control(QObject *parent = nullptr);
~Control();

public:
TestA* m_pTestA;
TestB* m_pTestB;

void controlSendData();

signals:

};

#endif // CONTROL_H

#include "Control.h"

Control::Control(QObject *parent) : QObject(parent)
{
m_pTestA = new TestA;
m_pTestB = new TestB;

QObject::connect(m_pTestA, &TestA::sendDataFromTestA, m_pTestB, &TestB::recvDataAtTestB);
QObject::connect(m_pTestB, &TestB::sendDataFromTestB, m_pTestA, &TestA::recvDataAtTestA);
}

Control::~Control()
{
if(m_pTestA)
{
delete m_pTestA;
m_pTestA = nullptr;
}
if(m_pTestB)
{
delete m_pTestB;
m_pTestB = nullptr;
}
}

void Control::controlSendData()
{
m_pTestA->emitDataFromTestA();
m_pTestB->emitDataFromTestB();
}

四 调用类

#include "MainWindow.h"
#include "TestA.h"
#include "TestB.h"
#include "Control.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// TestA testA;
// TestB testB;
// a.connect(&testA, &TestA::sendDataFromTestA, &testB, &TestB::recvDataAtTestB);
// testA.emitDataFromTestA();

// a.connect(&testB, &TestB::sendDataFromTestB, &testA, &TestA::recvDataAtTestA);
// testB.emitDataFromTestB();
Control control;
control.controlSendData();

MainWindow w;
w.show();
return a.exec();
}

运行

Qt不同类之间建立信号槽,并传递参数_源码下载

源码下载

​​源码下载​​


举报

相关推荐

0 条评论