我正在学习如何使用Qt编写程序。我的问题是关于我不太擅长的3件事:指针,对象和“new()”。
看:(对话是一个班级)
//start of code...
...
private:
Dialog *mDialog; //Dialog is a class
...
void MainWindow::on_activationNew_window_triggered()
{
mDialog = new Dialog(this); // Explain me this "this"
}
...
//end of code
解释一下这条线是如何工作的,“这个”是什么(或者是)真实的。
我所知道的是mDialog是一个窗口的类,当范围结束时,窗口关闭,所以他制作了指针并使用new,因为它将使用堆栈内存,这意味着它不会关闭范围结束时的窗口。
如果你想看他正在制作的视频部分并解释这个(也许我不够清楚)这里是视频(从8:07开始):
http://www.youtube.com/watch?v=wUH_gu2HdQE&feature=relmfu
提供任何帮助!
答案 0 :(得分:2)
“this”是一个c ++概念......当在一个对象内部工作时(在你的例子中是MainWindow),这是一个指向同一个对象的指针。
所以说我在c ++中创建了一个名为Dog的类,在我的方法中,我可以将当前对象称为。
class Dog
{
public:
Dog(); //default constructor
Dog(const Dog&); //copy constructor
};
Dog::Dog(const Dog& original)
{
if (&original != this)
//do whatever;
}
答案 1 :(得分:2)
正如其他人所说,“这个”指的是被称为的对象。就像:
class X {
public:
int y;
};
如果你写
X obj_X;
obj_X将有一个名为“this”的变量。它将用于访问自身,并且最常用于将类对象传递给另一个方法/类/任何东西。
现在,关于Qt:)
每个Qt对象都有一个父级。这用于Qt内部工作的很多,但它就像一个对象拥有另一个。要指定父对象是什么,以及子对象是什么,请将父对象的地址发送给子对象的构造函数。
所以,你也可以这样做 Dialog mDialog(this);
这意味着事情与“新”运算符无关。让我们来看看:
Dialog mDialog(/*< constructor parameters >*/); << HERE!
“this”被发送到mDialog的构造函数,以指定它具有父级。它的父级是“this”指向的对象。你也可以这样做
Dialog mDialog(); // In which case mDialog has NO parent, because 0 parameteres went to the constructor
就这么简单:)。获取您的c ++书籍并阅读有关构造函数的更多信息,并在互联网上获得更多Qt教程。祝你好运!
答案 2 :(得分:1)
(非静态)成员函数是使用类类型的隐式参数调用的函数。在定义中
void MainWindow::on_activationNew_window_triggered()
{ //...
}
MainWindow::
表示正在定义的函数是类MainWindow
的成员函数。在(非静态)成员函数中,关键字this
是指向该隐式参数的指针。 (另外,如果你只是命名一个像member
这样的班级成员,它对于this->member
来说真的很短。)
因此,在您引用的函数中,this
的类型为MainWindow* const
。
看起来代码正在将指针传递给MainWindow
到Dialog
构造函数。
答案 3 :(得分:1)
this
指的是可以在属于类(或联合或结构)的非静态成员函数中使用的指针。它指向调用成员函数的对象(在本例中为MainWindow
)。
将它传递给Dialog
的构造函数的原因是由于Qt的对象模型。有关详细信息,请参阅以下文档: