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(),直到用户关闭它为止