QT5 如何在多个cpp文件中传递变量(图文详解)

前言

  为了的可读性和移植性,我们可能需要将一个CPP文件拆分成多个文件,这时,如果在一个.cpp文件中想调用另一个.cpp中的变量该如何操作?


具体步骤

1、新建不同的.cpp项目工程文件

这里面原始参数放在ex01中,new_widget用于调用原始参数。
QT5 如何在多个cpp文件中传递变量(图文详解)_第1张图片

2、在ex01.cpp中声明一个外部变量

  注意:外部变量extern要放在最开始,一定不要放在class类中,否则会报错:storage class specified for 'XXX(变量名)'
QT5 如何在多个cpp文件中传递变量(图文详解)_第2张图片

3、在ex01.cpp中定义该变量

QT5 如何在多个cpp文件中传递变量(图文详解)_第3张图片

  至此,该变量的声明和定义工作已经完毕,在其他.cpp文件中,例如new_widget.cpp中,如果想调用该变量,则引用一下extern即可。

4、在其他.cpp文件中调用原始变量

QT5 如何在多个cpp文件中传递变量(图文详解)_第4张图片


注意事项

  要注意区分“声明”和“定义”之间的区别:
  根据C++标准的规定,一个变量声明必须同时满足两个条件,否则就是定义:
     (1)声明必须使用extern关键字;
     (2)不能给变量赋初值



  extern  int a;      //声明 

  int a;              //定义
  int a = 0; 		  //定义
  extern int a = 0;   //定义

完整源代码

ex01.h

#ifndef EX01_H
#define EX01_H

#include 
#include "new_widget.h"

extern int a;

namespace Ui {
class ex01;
}

class ex01 : public QWidget
{
    Q_OBJECT

public:
    explicit ex01(QWidget *parent = 0);
    ~ex01();

private:
    Ui::ex01 *ui;

private slots:
    void Slot_open_widget();
};

#endif // EX01_H

new_widget.h

#ifndef NEW_WIDGET_H
#define NEW_WIDGET_H

#include 

namespace Ui {
class new_widget;
}

class new_widget : public QWidget
{
    Q_OBJECT

public:
    explicit new_widget(QWidget *parent = 0);
    ~new_widget();

private:
    Ui::new_widget *ui;
};

#endif // NEW_WIDGET_H

ex01.cpp
这里我做了一个新窗口的弹出widget->show();,不然的话显示不了qDebug()的内容

#include "ex01.h"
#include "ui_ex01.h"

int a = 15;

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

    connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(Slot_open_widget()));
}

void ex01::Slot_open_widget()
{
    new_widget *widget = new new_widget();
    widget->show();
}

ex01::~ex01()
{
    delete ui;
}

new_widget.cpp

#include "new_widget.h"
#include "ui_new_widget.h"
#include 

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

    extern int a;
    qDebug() << a;
}

new_widget::~new_widget()
{
    delete ui;
}

运行结果如图:
QT5 如何在多个cpp文件中传递变量(图文详解)_第5张图片

你可能感兴趣的:(C++,QT5)