Qt顶层窗口为什么创建在栈不是堆?

Qt的程序主程序都都会这么一段代码:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    DialogLocal w;
    w.show();
    return a.exec();
}

       不管这个w实例是dialog或者Widgrt,都会在堆上创建,而不是new出来,这是为啥?

       原因:main的串口是顶层窗口,应用程序会形成以此为根基的对象树,顶层窗口关闭后,如果没有销毁,而是隐藏了,那么在退出的时候没有手动销毁的话,其延伸出来的任何部件都不会释放。所以,在顶层窗口上创建的部件,只 需要制定其parent的参数为this,也就是widget为父窗口就不需要进行delete操作,Qt的对象树使用析构函数会替我们自己完成。

Qt中,创建和管理`QDockWidget`窗口的步骤如下: 1. 创建`QDockWidget`对象:使用`new`关键字创建`QDockWidget`的实例,并可以提供一个标题,这个标题将显示在窗口的顶部。 ```cpp QDockWidget* dockWidget = new QDockWidget(tr("标题"), this); ``` 2. 设置`QDockWidget`的窗口部件:你可以通过`setWidget()`方法为`QDockWidget`设置一个中心窗口部件(`QWidget`),这是`QDockWidget`的内容区域。 ```cpp QWidget* centralWidget = new QWidget; dockWidget->setWidget(centralWidget); ``` 3. 将`QDockWidget`添加到主窗口:使用`QMainWindow`的`addDockWidget()`方法将`QDockWidget`添加到主窗口中。你可以指定`QMainWindow`的边角位置,例如,`Qt::LeftDockWidgetArea`表示窗口将被添加到主窗口的左侧。 ```cpp addDockWidget(Qt::LeftDockWidgetArea, dockWidget); ``` 4. 可选设置:`QDockWidget`提供了许多功能,比如可浮动、可关闭等,你可以通过`setFeatures()`方法设置这些特性。 ```cpp dockWidget->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable); ``` 5. 调整和管理:之后你可以根据需要对`QDockWidget`进行更多的调整和管理,比如改变其大小,禁用其关闭或浮动等特性。 ```cpp dockWidget->resize(200, 200); // 设置窗口大小 dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); // 设置窗口可以移动到哪些区域 dockWidget->setFloating(false); // 禁止浮动 ``` 6. 启用或禁用`QDockWidget`:你可以根据需要启用或禁用`QDockWidget`。 ```cpp dockWidget->setEnabled(false); // 禁用 // 或 dockWidget->setEnabled(true); // 启用 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雲烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值