QT中的QTreeView内存释放问题

待续_1006 2018-04-03 09:35:55


QStandardItemModel *m_model= new QStandardItemModel ( ui ->treeView )
ui ->treeView->setModel(m_model);

QStandardItem *m_TreeRoot = new QStandardItem(QString::fromLocal8Bit("根节点"));
m_model->appendRow(m_TreeRoot);

QStandardItem* temp1 = new QStandardItem("第一层");
QStandardItem* temp2 = new QStandardItem("第二层");
QStandardItem* temp3 = new QStandardItem("第三层");
m_TreeRoot.appendRow(temp1 );
temp1 .appendRow(temp2 );
temp3 .appendRow(temp3 );

最终内训如何释放,一层一层递归释放???

还是下面这样?
if(m_TreeRoot)
{
delete m_TreeRoot;
m_TreeRoot = NULL;
}

if(m_model)
{
delete m_model;
m_model = NULL;
}
...全文
1592 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
萧洛 2018-04-08
  • 打赏
  • 举报
回复
引用 2 楼 foxyz 的回复:
纠正一下楼上的。model 一般来说是需要你自己手工去delete的。因为可能有很多个view在共用一个model,所以没法在适当时机去析构model。其他的你new出来的item,只要加入到model后,其生存期或者说owner就发生转移了。他们的析构无需你显式delete
看清楚啊!楼主创建model已经设置了ui ->treeView为父项,ui ->treeView销毁,model自动删除。你说的应该是不设置父项的情况。
donwmufromdying 2018-04-03
  • 打赏
  • 举报
回复
纠正一下楼上的。model 一般来说是需要你自己手工去delete的。因为可能有很多个view在共用一个model,所以没法在适当时机去析构model。其他的你new出来的item,只要加入到model后,其生存期或者说owner就发生转移了。他们的析构无需你显式delete
萧洛 2018-04-03
  • 打赏
  • 举报
回复
你申请的对象都已经跟treeView关联了,所以不需要自己去删除。 比如调用QStandardItemModel的takeRow()删除一行,则你申请的对象会自动删除。 m_model也不需要删除,当ui ->treeView销毁时,m_model自动删除。

16,235

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧