Ton*_*ony 14 c++ qt qwidget qobject
在Qt中,我可以通过合成将子窗口小部件嵌入其父窗口中,还是必须创建它们new
?
class MyWindow : public QMainWindow
{
...
private:
QPushButton myButton;
}
MyWindow::MyWindow ()
: mybutton("Do Something", this)
{
...
}
Run Code Online (Sandbox Code Playgroud)
文档说任何派生的对象QObject
在其父元素被销毁时会自动销毁; 这意味着调用delete
,在上面的例子中会崩溃.
我必须使用以下内容吗?
QPushButton* myButton;
myButton = new QPushButton("Do Something", this);
Run Code Online (Sandbox Code Playgroud)
编辑
答案非常多样化,基本上归结为三种可能性:
delete
堆分配的对象(这是如何工作的?)delete
该对象(但是不会将无父小部件变成顶级窗口吗?)哪一个是正确的?
当特定对象的删除序列开始时,将删除非静态非堆成员变量.只有当所有成员都被删除时,它才会转到基类的析构函数.因此,在调用~QMainWindow()之前,将删除QPushButton myButton成员.并且从QObject文档:"如果我们在父对象之前删除子对象,Qt将自动从父对象的子列表中删除该对象".因此不会发生崩溃.
归档时间: |
|
查看次数: |
1636 次 |
最近记录: |