关于QT多个.cpp文件内容交互

本文介绍了在QT项目中使用信号与槽机制进行数据传递以及通过公有成员函数访问私有变量两种数据交互方式,以确保线程安全并提升代码组织性。
摘要由CSDN通过智能技术生成

在学习QT的过程中不免随着项目的扩大,业务需求的增多,需要添加多个类文件便于计算。在计算的过程中就需要源文件之间的数据交互。

常用的数据交互方法有以下几种

1.通过QT独有的信号与槽机制完成数据的传送。

2.在建立对象的同时加入公有函数来访问类内私有变量。

3.在对象内部完成一系列复杂逻辑计算后通过设置返回值,在另一个源文件中新建局部/全局变量进行接受即可(方法简单不做过多概述)

首先第一种方法:

通过信号与槽进行传递,QT独有的信号与槽机制可以保证线程安全性,操作简单。例如下面创建一个Data类来完成数据的传递。

注意:Data类要想实现信号与槽必须继承QObject类,类内声明Q_OBJECT宏。

//头文件中进行声明
class Data : public QObject
{
    Q_OBJECT

    
public:
//一般在构造函数中进行私有变量的初始化,在析构函数中进行delete操作
    Data();
    ~Data();
    void GenerateData();
signals:
    void SendData(int sendnum);
private:
    int m_num;
}


//源文件中进行类内实现

void Data::GenerateData()
{
    int num=0;
    
    num+=20;
//假设要传递num的值给主程序读取。
    emit SendData(num);

}

接下来演示主函数的槽函数命令获取子函数的num;

//MainWindow里的部分头文件内容
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public slots:
    void RecvData(int num);

private:
    int     m_num_2;
    Data    m_data;

}

//Mainwindow源文件:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    m_num_2(0)
{
    
    ui->setupUi(this);
    
    
//可以根据需求连接信号和槽:可以是在按钮槽函数中完成数据信号和槽的绑定,也可以在MainWindow的构造中完成。这里主要是讲清楚如何进行数据传递就行,不做过多其他的讲解。
connect(m_data,&Data::SendData,this,&MainWindow::RecvData);

//调用text01
    text01();
}
MainWindow::~MainWindow()
{    
   
    delete ui;
}
void text01()
{
    m_Data.GenerateData;
    
    qDebug()<<m_num_2;
    
}




2.由于类内的成员变量一般是设置为私有,外部命令不可调用,但类内成员函数可以访问私有成员变量。通过设计对象成员函数来获取类内的成员变量也是数据传递的一种方式。

​
//头文件中进行声明
class Data : public QObject
{
    Q_OBJECT

    
public:
//一般在构造函数中进行私有变量的初始化,在析构函数中进行delete操作
    Data();
    ~Data();
    void GenerateData();
    void Getnum();
signals:
    void SendData(int sendnum);
private:
    int m_num;
}


//源文件中进行类内实现

void Data::GenerateData()
{
    int num=0;
    
    num+=20;
    m_num=num;
}
//采用引用传递
void Data::Getnum(int & _num)
{

    _num=m_num;

}



​

 MainWindow的程序如下所示:

​
//MainWindow里的部分头文件内容
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public slots:
    void RecvData(int num);

private:
    Data    m_data;

}

//Mainwindow源文件:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    
    ui->setupUi(this);
    

    text01();
}
MainWindow::~MainWindow()
{    
   
    delete ui;
}
void text01()
{
    m_Data.GenerateData();
    int numFromData=0;
    
    m_Data.Getnum(numFromData);
    qDebug()<<numFromData;
    
}





​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值