QT不同类之间通过connect连接

本文介绍了如何在Qt环境中通过信号和槽实现类A与类B之间的通信。通过在A类中定义emitDataFromA()函数发射信号,并在B类中定义recvDataAtB()槽函数接收信号,使用QCoreApplication的connect方法连接这两个类,实现了从A到B的数据传递。同时,也展示了B到A的信号槽连接和通信过程。
摘要由CSDN通过智能技术生成

一、背景

写代码时经常会有很多头文件和很多类,如果要在A类里面使用emit发射信号,在B类里面接收这个触发信号并作出响应,此时就需要connect连接两个类的信号和槽。

二、代码

A.h

#pragma once
#include<QObject>
#include<QDebug>

class A :public QObject
{
	Q_OBJECT
public:
	void emitDataFromA()
	{
		const char* name = "dataFromA";
		emit sendDataFromA(name);
	}

signals:
	void sendDataFromA(const char* data);

public slots:
	void recvDataAtA(const char* data)
	{
		qDebug() << "A class recv data:" << data;
	}

};

 B.h

#pragma once
#include<QObject>
#include<QDebug>

class B :public QObject
{
	Q_OBJECT
public:
	void emitDataFromB()
	{
		const char* name = "dataFromB";
		emit sendDataFromB(name);
	}

signals:
	void sendDataFromB(const char* data);

public slots:
	void recvDataAtB(const char* data)
	{
		qDebug() <<"B class recv data:"<< data;
	}

};

 main.cpp

#include <QtCore/QCoreApplication>
#include"A.h"
#include"B.h"

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
	A a;
	B b;
	//A发送信号触发B接收信号的槽函数
	app.connect(&a, SIGNAL(sendDataFromA(const char*)), &b, SLOT(recvDataAtB(const char*)));
	//执行A类里触发信号的函数
	a.emitDataFromA();

	//B发送信号触发A接收信号的槽函数
	app.connect(&b, SIGNAL(sendDataFromB(const char*)), &a, SLOT(recvDataAtA(const char*)));
	//执行B类里触发信号的函数
	b.emitDataFromB();

    return app.exec();
}

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Qt不同之间变量传递的方法有很多种。 一、使用信号与槽机制 在Qt中,通过connect连接信号与槽,可以实现不同之间的变量传递。例如,当一个中的变量改变时,可以通过emit发送一个信号,并在其他中通过connect连接相应的槽函数,实现变量传递。这种方法尤其适合于不同之间的交互较少的情况。 二、使用全局变量 全局变量可以在程序的任何地方访问,因此可以通过定义全局变量,在需要访问的中直接使用。但是,全局变量存在两个显著问题:一个是可读性问题,全局变量存在于整个程序中,难以追踪;二是安全性问题,全局变量容易被误操作。 三、使用单例模式 单例模式是一种常用的设计模式,它可以保证一个只有一个实例,并提供一个全局的访问点。通过使用单例模式,不同可以通过调用单例的函数来获取需要的变量。这种方法比全局变量更安全,但也需要注意不要过度使用。 四、使用传参方式 当某个需要使用另一个的变量时,可以将需要使用的变量通过传参的方式传递给该的函数,这种方式适用于变量的交互较为频繁的情况,但也需要注意过度传参可能会导致程序设计复杂化。 以上几种方法都可以实现不同之间的变量传递,但使用时需要根据具体的情况选择合适的方法。 ### 回答2: 在Qt中,不同之间变量的传递可以通过以下方式实现: 1. 使用信号和槽传递变量: 信号和槽是Qt的重要机制之一,它可以实现不同之间的通讯。在发送信号中定义一个信号接收信号中定义一个槽函数,并将两者关联起来。在信号函数中传递变量,槽函数中接收变量即可实现变量传递。示例代码如下: //发送信号 class Sender: public QObject { Q_OBJECT signals: void sendVar(int var); //定义一个带参数的信号 }; //接收信号 class Receiver: public QObject { Q_OBJECT public slots: void receiveVar(int var); //定义一个带参数的槽函数 }; //在两个中实现信号和槽的关联 connect(sender, &Sender::sendVar, receiver, &Receiver::receiveVar); 2. 使用全局变量传递变量: 全局变量可以在整个程序中访问,因此可以用于不同之间的变量传递。在定义全局变量的文件中声明变量并实现其访问方法,其他中可以直接调用该变量,并通过访问方法获取或修改变量的值。示例代码如下: //定义全局变量 extern int var; //声明访问方法 int getVar(); void setVar(int var); //在Sender中获取和修改变量 int var = getVar(); setVar(var); //在Receiver中获取和修改变量 int var = getVar(); setVar(var); 3. 使用构造函数和成员函数传递变量: 在创建一个的对象时,可以通过其构造函数传递变量,在其他中创建该对象并调用其成员函数获取或修改变量的值。示例代码如下: //定义 class MyClass { public: MyClass(int var): m_var(var) {} //定义构造函数传递变量 int getVar() { return m_var; } //定义成员函数获取变量 void setVar(int var) { m_var = var; } //定义成员函数修改变量 private: int m_var; }; //在Sender中创建对象并获取和修改变量 MyClass myClass(var); int var = myClass.getVar(); myClass.setVar(var); //在Receiver中创建对象并获取和修改变量 MyClass myClass(var); int var = myClass.getVar(); myClass.setVar(var);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aspiretop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值