博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UI中经过需要临时new对象,那么该如何delete呢?
阅读量:4059 次
发布时间:2019-05-25

本文共 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就可以了。

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

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

你可能感兴趣的文章
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
WAV文件解析
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
QT打开项目提示no valid settings file could be found
查看>>
android 代码实现圆角
查看>>
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
ReactNative使用Redux例子
查看>>
Promise的基本使用
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
course_2_assessment_6
查看>>
coursesa课程 Python 3 programming course_2_assessment_7 多参数函数练习题
查看>>
coursesa课程 Python 3 programming course_2_assessment_8 sorted练习题
查看>>
在unity中建立最小的shader(Minimal Shader)
查看>>
1.3 Debugging of Shaders (调试着色器)
查看>>
关于phpcms中模块_tag.class.php中的pc_tag()方法的含义
查看>>
linux安装usb wifi接收器
查看>>