UI中经过需要临时new对象,那么该如何delete呢?

在一个项目中使用QTabWidget,需要时不时的new出一个新的对象,并使用addTab()添加上去,但是这个new的对象该如何删除呢?

就必须保存好这个指针,以便不需要的时候delete掉。

在QTabWidget的时候,可以不用管这个指针,应该当addTab后,它就由QTabWidget接管了,QTabWidget会保存这个指针的。

当我们想关闭一个Tab时,会emit tabCloseRequested(int)这个信号,指明了当前的index,

可以根据这个index获取指针,

this->m_tabWidget=new QTabWidget;
this->m_tabWidget->setTabsClosable(true);
connect(this->m_tabWidget,SIGNAL(tabCloseRequested(int)),this,SLOT(ZSlotCloseTab(qint32)));


void BeTaskFlow::ZSlotOpenSheetTemplateEditor()
{
    //sheet templates editor.
   SheetTemplatesEditor *tTemplateEditor=new SheetTemplatesEditor;
   this->m_tabWidget->addTab(tTemplateEditor,QIcon(":/48x48/alert.png"),tr("Sheet Template Editor"));
   this->m_tabWidget->setCurrentWidget(tTemplateEditor);
}


void BeTaskFlow::ZSlotCloseTab(qint32 index)
{
    QWidget *tTab=this->m_tabWidget->widget(index);
    qDebug()<<"delete:"<<tTab;
    this->m_tabWidget->removeTab(index);
    delete tTab;
}


对于以上这种情况,由父对象负责保存指针,但是有一些情况下,没有父对象可以使用。

这时可以使用容器类来保存new出来的对象的指针,

当对象需要关闭时,emit出自己的指针 例如: emit ZSignalCloseMe(this);

然后父对象在自己的接收函数中在容器中查找这个指针,然后delete再从容器中remove就可以了。


下面是从网上找的相关的资料:

一个是保存对象,一个是保存指针。俺更偏向于保存指针,因为减少了对象复制的开销




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值