<分区>
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,
visit the help center 指导。
关闭 10 年前 。
我正在学习如何使用 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
感谢您的帮助!
正如其他人所说,“this”指的是调用它的对象。就像:
class X {
public:
int y;
};
如果你写
X obj_X;
obj_X 将有一个名为“this”的变量。它将用于访问自身,最常用于将类对象传递给另一个方法/类/任何东西。
现在,关于 Qt :)
每个 Qt 对象都有一个父对象。这用于 Qt 的很多 内部工作,但它就像一个对象拥有另一个对象。要指定什么是父对象,什么是子对象,您将父对象的地址发送给子对象的构造函数。
所以,你也可以这样做
对话框 mDialog(this);
这意味着这件事与"new"运算符无关。那么让我们开始吧:
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 教程。祝你好运!