qt中在不同类间传递参数的几种方式

本文介绍了一个使用Qt的全局变量实现主窗口与子窗口间计数器值同步更新的例子。通过定时器每秒增加计数器值,并利用全局变量在不同组件间共享该值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    刚开始我通过构造函数传递参数,能成功传递但数据却不会自动更新。随后想到通过全局变量传递参数。一般来说在多个源程序间传递变量大概有两种方法,一是利用extern声明全局变量来进行传递,二是将全局变量定义成一个类的静态变量,通过类名::变量名进行调用
    本程序实现一个计数器,主窗口显示计数值(1s加1),点击按钮弹出子窗口,子窗口的lcd同步显示计数值。其中ui文件已用designer画好。

//my_define.h文件:
#ifndef MY_DEFINE_H
#define MY_DEFINE_H
extern int aa;

/*class temp
{
  public:
  static 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 
#include 
#include 
#include 
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 
#include 
#include 
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_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  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值