1

我正在学习如何使用 Qt 制作程序。我的问题是关于我不太擅长的三件事:指针、对象和“new()”。

看:(Dialog是一个类)

//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

求帮助!

4

4 回答 4

2

正如其他人所说,“this”是指调用它的对象。就像:

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++ 书籍并阅读有关构造函数的更多信息,并在 Internet 上获取更多 Qt 教程。祝你好运!

于 2012-10-27T01:19:00.383 回答
2

“this”是一个 c++ 概念....在对象内部工作时(在您的示例 MainWindow 中),这是指向同一对象的指针。

假设我在 C++ 中创建了一个名为 Dog 的类,在我的方法中我可以将当​​前对象称为 this。

class Dog
{
public: 
Dog(); //default constructor
Dog(const Dog&); //copy constructor

};

Dog::Dog(const Dog& original)
{
if (&original != this)
 //do whatever;
}
于 2012-10-27T00:51:31.617 回答
1

(非静态)成员函数是使用类类型的隐式参数调用的函数。在定义中

void MainWindow::on_activationNew_window_triggered()
{ //...
}

MainWindow::意味着被定义的函数是 class 的成员函数MainWindow。在(非静态)成员函数中,关键字this是指向该隐式参数的指针。(另外,如果你只是命名一个类成员,比如member,它真的是 的缩写this->member。)

所以在你引用的函数中,类型thisMainWindow* const.

看起来代码正在将指针传递MainWindowDialog构造函数。

于 2012-10-27T00:53:47.433 回答
1

this指可以在属于类(或联合或结构)的非静态成员函数中使用的指针。它指向为其调用成员函数的对象(在本例中为MainWindow)。

它被传递到构造函数的Dialog原因是由于 Qt 的对象模型。有关这方面的更多信息,请参阅以下文档:

http://qt-project.org/doc/qt-4.8/objecttrees.html

于 2012-10-27T00:56:07.437 回答