本文共 1104 字,大约阅读时间需要 3 分钟。
在一个项目中使用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就可以了。
下面是从网上找的相关的资料:
一个是保存对象,一个是保存指针。俺更偏向于保存指针,因为减少了对象复制的开销。