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

参考:http://blog.csdn.net/shangyaowei/article/details/17424673

最近开发一个程序,需要多个源文件,包括若干个头文件和若干个定义文件。因此如何在多个源程序间开发传递变量就成了一个关键问题。刚开始我通过构造函数传递参数,能成功传递但数据却不会自动更新。随后想到通过全局变量传递参数。一般来说在多个源程序间传递变量大概有两种方法,一是利用extern声明全局变量来进行传递,二是将全局变量定义成一个类的静态变量,通过类名::变量名进行调用。

通过若干次调试,两种方法都成功了,现将注意要点记录如下(注释部分为第二种方法):

本程序实现一个计数器,主窗口显示计数值(1s加1),点击按钮弹出子窗口,子窗口的lcd同步显示计数值。其中ui文件已用designer画好。
my_define.h文件:


 
 
  1. #ifndef MY_DEFINE_H
  2. #define MY_DEFINE_H
  3. extern int aa;
  4. #endif
my_define.cpp文件


 
 
  1. #include "my_define.h"
  2. //int temp::aa=0;
  3. int aa= 0;
dialog.h 文件


 
 
  1. #ifndef MYFORM_H
  2. #define MYFORM_H
  3. #include "dialog_base.h"
  4. class MyForm : public MyFormBase
  5. {
  6. Q_OBJECT
  7. public:
  8. MyForm( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
  9. ~MyForm();
  10. protected:
  11. virtual void form_1slot();
  12. protected slots:
  13. virtual void mytime1();
  14. };
  15. #endif
dialog.cpp文件


 
 
  1. #include "dialog.h"
  2. #include "f1.h"
  3. //#include "my_define.h"
  4. #include <qpushbutton.h>
  5. #include <qstring.h>
  6. #include <qtimer.h>
  7. #include <qlineedit.h>
  8. extern int aa; //全局变量声明
  9. MyForm::MyForm( QWidget* parent, const char* name, WFlags fl )
  10. : MyFormBase( parent, name, fl )
  11. {
  12. QTimer *timer1= new QTimer( this);
  13. connect(timer1,SIGNAL(timeout()), this,SLOT(mytime1()));
  14. timer1->start( 1000, 0);
  15. }
  16. void MyForm::mytime1()
  17. {
  18. LineEdit1->setText(QString::number( aa++));
  19. // LineEdit1->setText(QString::number(temp::aa++));
  20. }
  21. void MyForm::form_1slot()
  22. {
  23. int bb= 20;
  24. Form1 *form1 = new Form1(bb); //通过构造函数传递参数bb
  25. form1->showFullScreen();
  26. }
  27. MyForm::~MyForm()
  28. {
  29. }
f1.h 文件


 
 
  1. #ifndef FORM1_H
  2. #define FORM1_H
  3. #include "f1_base.h"
  4. class Form1 : public ChildFormBase
  5. {
  6. Q_OBJECT
  7. public:
  8. Form1( int num= 0,QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
  9. virtual ~Form1();
  10. public slots:
  11. void closeForm1();
  12. protected slots:
  13. virtual void display_slot();
  14. };
  15. #endif // FORM1_H
f1.cpp文件


 
 
  1. #include "f1.h"
  2. //#include "my_define.h"
  3. #include <qpushbutton.h>
  4. #include <qlcdnumber.h>
  5. #include <qtimer.h>
  6. extern int aa;
  7. Form1::Form1( int num,QWidget* parent, const char* name, WFlags fl )
  8. : ChildFormBase( parent, name, fl )
  9. {
  10. QTimer *flashtimer= new QTimer( this);
  11. connect(flashtimer,SIGNAL(timeout()), this,SLOT(display_slot()));
  12. flashtimer->start( 500, 0);
  13. LCDNumber2->display(num); //lcd2显示bb
  14. connect( BackMainButton , SIGNAL(clicked()) , this , SLOT(closeForm1()) );
  15. }
  16. void Form1::display_slot()
  17. {
  18. LCDNumber1->display(aa);
  19. // LCDNumber1->display(temp::aa);//lcd1实时显示aa
  20. }
  21. Form1::~Form1()
  22. {
  23. // no need to delete child widgets, Qt does it all for us
  24. }
  25. void Form1::closeForm1()
  26. {
  27. close();
  28. }
main.cpp文件


 
 
  1. #include "dialog.h"
  2. #include <qtopia/qpeapplication.h>
  3. QTOPIA_ADD_APPLICATION( "dialog",MyForm)
  4. QTOPIA_MAIN
dialog.pro文件


 
 
  1. TEMPLATE = app
  2. CONFIG += qtopia warn_on release
  3. HEADERS = dialog.h \
  4. my_define.h\
  5. f1.h
  6. SOURCES = dialog.cpp \
  7. my_define.cpp\
  8. f1.cpp\
  9. main.cpp
  10. INTERFACES = dialog_base.ui \
  11. f1_base.ui
  12. TARGET = dialog
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值