当前位置:网站首页>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();
}
运行
源码下载
边栏推荐
- 如果在构造函数中抛出异常,最好的做法是防止内存泄漏?
- Reading notes 004: Wang Yangming's quotations
- ROS from entry to mastery (IX) initial experience of visual simulation: turtlebot3
- 【编程题】【Scratch二级】2019.03 绘制方形螺旋
- 【编程题】【Scratch二级】2019.09 绘制雪花图案
- C language 005: common examples
- Anaconda+pycharm+pyqt5 configuration problem: pyuic5 cannot be found exe
- 智慧监管入场,美团等互联网服务平台何去何从
- Development of a horse tourism website (realization of login, registration and exit function)
- Database query - what is the highest data?
猜你喜欢
Is 35 really a career crisis? No, my skills are accumulating, and the more I eat, the better
大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?
STM32F1与STM32CubeIDE编程实例-旋转编码器驱动
【编程题】【Scratch二级】2019.09 制作蝙蝠冲关游戏
ROS from entry to mastery (IX) initial experience of visual simulation: turtlebot3
深潜Kotlin协程(二十二):Flow的处理
用語雀寫文章了,功能真心强大!
Kubectl's handy command line tool: Oh my Zsh tips and tricks
Daily question brushing record (16)
The standby database has been delayed. Check that the MRP is wait_ for_ Log, apply after restarting MRP_ Log but wait again later_ for_ log
随机推荐
STM32F1與STM32CubeIDE編程實例-旋轉編碼器驅動
limit 与offset的用法(转载)
Installation and configuration of sublime Text3
Stm32f1 and stm32cubeide programming example - rotary encoder drive
Use filters to count URL request time
PostGIS learning
Anaconda+pycharm+pyqt5 configuration problem: pyuic5 cannot be found exe
什么是负载均衡?DNS如何实现负载均衡?
玩轉Sonar
应用实践 | 数仓体系效率全面提升!同程数科基于 Apache Doris 的数据仓库建设
[研发人员必备]paddle 如何制作自己的数据集,并显示。
单机高并发模型设计
How does the markdown editor of CSDN input mathematical formulas--- Latex syntax summary
Common selectors are
Problems faced when connecting to sqlserver after downloading (I)
A brief history of information by James Gleick
[programming problem] [scratch Level 2] 2019.09 make bat Challenge Game
Visual Studio Deployment Project - Create shortcut to deployed executable
Play sonar
华为交换机S5735S-L24T4S-QA2无法telnet远程访问