C++ Qt小部件和指针

C++ Qt小部件和指针,c++,qt,pointers,C++,Qt,Pointers,当使用Qtwidgets(即QLabel)时,我们为什么要使用指针 例如,我们为什么要写: QLabel*label=newqlabel(“你好”) 而且,不是: QLabel标签=新的QLabel(“你好”) 谢谢。因为如果要在堆栈上创建它们,它们将在作用域结束后被删除 如果你要写这样的东西: void foo() { QWidget windget; } 终止foo()后,小部件将被删除。如果使用new,它将一直有效,直到手动删除(通常由父窗口小部件删除) 我不认为QLabel label

当使用
Qt
widgets(即QLabel)时,我们为什么要使用指针

例如,我们为什么要写:

QLabel*label=newqlabel(“你好”)

而且,不是

QLabel标签=新的QLabel(“你好”)


谢谢。

因为如果要在堆栈上创建它们,它们将在作用域结束后被删除

如果你要写这样的东西:

void foo()
{
QWidget windget;
}
终止foo()后,小部件将被删除。如果使用
new
,它将一直有效,直到手动删除(通常由父窗口小部件删除)

我不认为
QLabel label=newqlabel(“Hello”)甚至可以编译。可能是你的错

QLabel标签(“Hello”)

new
返回指针。如果通过动态内存分配创建对象,显然必须使用指针

QLabel标签=新的QLabel(“你好”)是不正确的代码,无法编译


为什么对小部件使用动态分配?因为它们必须在函数调用之间处于活动状态,就像任何事件驱动的GUI系统一样。堆栈(本地对象)上的分配将在范围结束时被释放,这对于WIDGET来说不太有效。

< P>我认为这不是QT问题,这应该是C++编程的问题。 您可能以前使用过Java,因为Java没有指针概念。
我建议,在使用C++和QT.

< P>之前,找到一本C++书,了解C++指针的含义和用法。如果你想定义一个没有指针的var,它看起来像是代码>标签-标签; 我们得到的标签是:

  • 位于堆栈上
  • 不能支持多态性

在C++中,如果使用指针或引用,VAR只能是面向对象的。Qt是一个面向对象的类库,这就是为什么
QLabel
是用指针定义的。

为了完整起见,没有理由不在堆栈上分配一些小部件。这对于使用寿命有限的对象尤其方便,例如上下文菜单和模态对话框,您必须等待结果。在这些小部件上,您通常调用exec(),直到用户关闭它为止