您的位置:首页 > 编程语言 > Qt开发

Qt不同类间传递变量方法总结

2018-01-09 11:25 274 查看
参考: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: