当前位置:网站首页>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();
}
运行
源码下载
边栏推荐
- [question de programmation] [scratch niveau 2] oiseaux volants en décembre 2019
- Introduction to programming hardware
- 大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?
- 80%的人答错,苹果logo上的叶子到底朝左还是朝右?
- When creating body middleware, express Is there any difference between setting extended to true and false in urlencoded?
- QT and OpenGL: loading 3D models using the open asset import library (assimp) - Part 2
- redis你到底懂不懂之list
- Zhou Hongqi, 52 ans, est - il encore jeune?
- paddle入门-使用LeNet在MNIST实现图像分类方法一
- 去了字节跳动,才知道年薪 40w 的测试工程师有这么多?
猜你喜欢
Pypharm uses, and the third-party library has errors due to version problems
深潜Kotlin协程(二十二):Flow的处理
52岁的周鸿祎,还年轻吗?
PostGIS learning
DNS 系列(一):为什么更新了 DNS 记录不生效?
Single machine high concurrency model design
【编程题】【Scratch二级】2019.12 绘制十个正方形
Reptile practice (VIII): reptile expression pack
面试题详解:用Redis实现分布式锁的血泪史
用語雀寫文章了,功能真心强大!
随机推荐
[programming problem] [scratch Level 2] March 2019 draw a square spiral
Solution to the problem of unserialize3 in the advanced web area of the attack and defense world
A brief history of information by James Gleick
在网页中打开展示pdf文件
SQL connection problem after downloading (2)
Common selectors are
STM32F1與STM32CubeIDE編程實例-旋轉編碼器驅動
[programming problem] [scratch Level 2] December 2019 flying birds
Kubectl's handy command line tool: Oh my Zsh tips and tricks
If an exception is thrown in the constructor, the best way is to prevent memory leakage?
从服务器到云托管,到底经历了什么?
Solution to prompt configure: error: curses library not found when configuring and installing crosstool ng tool
“一个优秀程序员可抵五个普通程序员”,差距就在这7个关键点
Robomaster visual tutorial (11) summary
Robomaster visual tutorial (0) Introduction
Pypharm uses, and the third-party library has errors due to version problems
第四期SFO销毁,Starfish OS如何对SFO价值赋能?
Tools for debugging makefiles - tool for debugging makefiles
Vscode software
Scrapy framework