初学者对于qt中的this指针会摸不着头脑,下面我谈谈自己的理解。
结论:this指针,指的就是qt designer里面ui界面,也就是xxx.ui文件。
举个例子。
现在我有三个文件,分别是server.h头文件,server.cpp源文件,还有server.ui文件。
在server.h文件里我定义了一个类server,它继承自QWidget。在private:里定义了一个server类的ui文件,实际上就是server.ui文件
//server.h
namespace Ui
{
class server;
}
class server : public QWidget
{
Q_OBJECT
public:
explicit server(QWidget *parent = 0,winpcap *tem = NULL);
~server();
private:
Ui::server *ui;
protected:
void paintEvent(QPaintEvent *);
this指针的一般解释是:this指针指向一个类的对象,只能在一个类的成员函数中调用,表示当前对象的地址。
在这个例子中,
Ui::server *ui;
这个新定义的ui 即是server类的一个对象(同时也是server.ui文件),当我在调用server类的成员函数(比如上面的 paintEvent函数),在paintEvent里使用this指针的时候,this指针所指的就是server.ui文件!
*****************************************************************(这段是解释namespace,不看可跳过)
有的同学会对qt中的namespace Ui疑惑,比如上面代码中的,
namespace Ui
{
class server;
}
这里谈谈我的理解。
为什么要用namespace?原因就在于qt想把 <直观的ui界面> 从 <具体的代码> 中分离出来。
怎么分离呢,基本思路就是从<具体的代码>中复制一份相同的代码出来,再转化为ui界面。具体的操作就是新定义一个server类的对象。
比如,上面那个例子。
private:
Ui::server *ui; //从<具体的代码>中复制一份相同的代码出来
再server.cpp里面,通常会由一句话
ui->setupUi(this);
这句代码的意思就是,将新定义的ui对象,通过qt提供的setupUi函数,转化为直观的ui界面,即server.ui
回到问题:为什么要namespace Ui?
namespace Ui
{
class server;
}
namespace Ui 就相当于 声明server这个类可以使用 xxx.ui文件。有点类似函数声明一样:namespace相当于声明,而server.ui 就相当于具体的函数定义。
假如我们去掉上面这段代码,那么编译的时候就会报错,说无法使用setupUi这个函数。
***********************************************************************************
回到问题,this指针什么意思?