当前位置:网站首页>Qt不同类之间建立信号槽,并传递参数
Qt不同类之间建立信号槽,并传递参数
2022-07-07 22:20:00 【妙为】
Qt系列文章目录
前言
最近遇到这种情况:假设有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();
}
运行
源码下载
边栏推荐
- Database interview questions + analysis
- 动态库基本原理和使用方法,-fPIC 选项的来龙去脉
- An error is reported during the process of setting up ADG. Rman-03009 ora-03113
- 51与蓝牙模块通讯,51驱动蓝牙APP点灯
- paddle入门-使用LeNet在MNIST实现图像分类方法一
- 备库一直有延迟,查看mrp为wait_for_log,重启mrp后为apply_log但过一会又wait_for_log
- If an exception is thrown in the constructor, the best way is to prevent memory leakage?
- QT and OpenGL: load 3D models using the open asset import library (assimp)
- redis你到底懂不懂之list
- RPA云电脑,让RPA开箱即用算力无限?
猜你喜欢

Go learning notes (1) environment installation and hello world

Basic learning of SQL Server -- creating databases and tables with the mouse

80%的人答错,苹果logo上的叶子到底朝左还是朝右?

How does the markdown editor of CSDN input mathematical formulas--- Latex syntax summary
![[programming problem] [scratch Level 2] March 2019 draw a square spiral](/img/fa/ae9dabdd36ba77b1f4644dd23bee93.png)
[programming problem] [scratch Level 2] March 2019 draw a square spiral

51与蓝牙模块通讯,51驱动蓝牙APP点灯

DNS 系列(一):为什么更新了 DNS 记录不生效?

C# 泛型及性能比较

An error is reported during the process of setting up ADG. Rman-03009 ora-03113

Smart regulation enters the market, where will meituan and other Internet service platforms go
随机推荐
[programming problem] [scratch Level 2] March 2019 draw a square spiral
How to insert highlighted code blocks in WPS and word
Play sonar
Kubectl's handy command line tool: Oh my Zsh tips and tricks
Set up personal network disk with nextcloud
Daily question brushing record (16)
Database query - what is the highest data?
【编程题】【Scratch二级】2019.09 绘制雪花图案
腾讯安全发布《BOT管理白皮书》|解读BOT攻击,探索防护之道
[programming questions] [scratch Level 2] March 2019 garbage classification
Notice on organizing the second round of the Southwest Division (Sichuan) of the 2021-2022 National Youth electronic information intelligent innovation competition
Zhou Hongqi, 52 ans, est - il encore jeune?
An error is reported during the process of setting up ADG. Rman-03009 ora-03113
Jouer sonar
测试流程不完善,又遇到不积极的开发怎么办?
Is it safe for tongdaxin to buy funds?
35岁真就成了职业危机?不,我的技术在积累,我还越吃越香了
Problems faced when connecting to sqlserver after downloading (I)
[programming problem] [scratch Level 2] draw ten squares in December 2019
Usage of limit and offset (Reprint)