参考:http://blog.csdn.net/shangyaowei/article/details/17424673
最近开发一个程序,需要多个源文件,包括若干个头文件和若干个定义文件。因此如何在多个源程序间开发传递变量就成了一个关键问题。刚开始我通过构造函数传递参数,能成功传递但数据却不会自动更新。随后想到通过全局变量传递参数。一般来说在多个源程序间传递变量大概有两种方法,一是利用extern声明全局变量来进行传递,二是将全局变量定义成一个类的静态变量,通过类名::变量名进行调用。
通过若干次调试,两种方法都成功了,现将注意要点记录如下(注释部分为第二种方法):
本程序实现一个计数器,主窗口显示计数值(1s加1),点击按钮弹出子窗口,子窗口的lcd同步显示计数值。其中ui文件已用designer画好。
my_define.h文件:
-
#ifndef MY_DEFINE_H
-
#define MY_DEFINE_H
-
extern
int aa;
-
-
#endif
my_define.cpp文件
-
#include "my_define.h"
-
//int temp::aa=0;
-
int aa=
0;
dialog.h 文件
-
#ifndef MYFORM_H
-
#define MYFORM_H
-
#include "dialog_base.h"
-
class MyForm :
public MyFormBase
-
{
-
Q_OBJECT
-
public:
-
MyForm( QWidget* parent =
0,
const
char* name =
0, WFlags fl =
0 );
-
~MyForm();
-
protected:
-
virtual void form_1slot();
-
protected slots:
-
virtual void mytime1();
-
};
-
#endif
dialog.cpp文件
-
#include "dialog.h"
-
#include "f1.h"
-
//#include "my_define.h"
-
#include <qpushbutton.h>
-
#include <qstring.h>
-
#include <qtimer.h>
-
#include <qlineedit.h>
-
extern
int aa;
//全局变量声明
-
MyForm::MyForm( QWidget* parent,
const
char* name, WFlags fl )
-
: MyFormBase( parent, name, fl )
-
{
-
QTimer *timer1=
new QTimer(
this);
-
connect(timer1,SIGNAL(timeout()),
this,SLOT(mytime1()));
-
timer1->start(
1000,
0);
-
}
-
void MyForm::mytime1()
-
{
-
LineEdit1->setText(QString::number( aa++));
-
// LineEdit1->setText(QString::number(temp::aa++));
-
}
-
void MyForm::form_1slot()
-
{
-
int bb=
20;
-
Form1 *form1 =
new Form1(bb);
//通过构造函数传递参数bb
-
form1->showFullScreen();
-
}
-
MyForm::~MyForm()
-
{
-
}
f1.h 文件
-
#ifndef FORM1_H
-
#define FORM1_H
-
#include "f1_base.h"
-
class Form1 :
public ChildFormBase
-
{
-
Q_OBJECT
-
public:
-
Form1(
int num=
0,QWidget* parent =
0,
const
char* name =
0, WFlags fl =
0 );
-
virtual ~Form1();
-
public slots:
-
void closeForm1();
-
protected slots:
-
virtual void display_slot();
-
};
-
#endif // FORM1_H
f1.cpp文件
-
#include "f1.h"
-
//#include "my_define.h"
-
#include <qpushbutton.h>
-
#include <qlcdnumber.h>
-
#include <qtimer.h>
-
extern
int aa;
-
Form1::Form1(
int num,QWidget* parent,
const
char* name, WFlags fl )
-
: ChildFormBase( parent, name, fl )
-
{
-
QTimer *flashtimer=
new QTimer(
this);
-
connect(flashtimer,SIGNAL(timeout()),
this,SLOT(display_slot()));
-
flashtimer->start(
500,
0);
-
LCDNumber2->display(num);
//lcd2显示bb
-
connect( BackMainButton , SIGNAL(clicked()) ,
this , SLOT(closeForm1()) );
-
}
-
void Form1::display_slot()
-
{
-
LCDNumber1->display(aa);
-
// LCDNumber1->display(temp::aa);//lcd1实时显示aa
-
}
-
Form1::~Form1()
-
{
-
// no need to delete child widgets, Qt does it all for us
-
}
-
void Form1::closeForm1()
-
{
-
close();
-
}
main.cpp文件
-
#include "dialog.h"
-
#include <qtopia/qpeapplication.h>
-
QTOPIA_ADD_APPLICATION(
"dialog",MyForm)
-
QTOPIA_MAIN
dialog.pro文件
TEMPLATE = app CONFIG += qtopia warn_on release HEADERS = dialog.h \ my_define.h\ f1.h SOURCES = dialog.cpp \ my_define.cpp\ f1.cpp\ main.cpp INTERFACES = dialog_base.ui \ f1_base.ui TARGET = dialog