• 关于QGraphicsScene 和 QGraphicsView 和 QDialog 的杂乱笔记【或说指针复习。。】


     1 LtCalibrateDlg::~LtCalibrateDlg()
     2 {
     3     if (m_pIplImageGray) cvReleaseImage(&m_pIplImageGray);
     4 
     5     MYDELETE(m_pKeyboard);
     6     MYDELETE(m_pNumKeyboard);
     7 
     8     delete m_pView;         //  LtCalibrateView*    成员变量;
     9     delete m_pScene;        //  QGraphicsScene*     成员变量;
    10     delete m_pAboveWnd;
    11 
    12     delete ui;
    13 }
    LtCalibrateDlg类中含有LtCalibrateView* 成员变量; QGraphicsScene* 成员变量; IplImage* 成员变量 etc.
     1 LtCalibrateView::~LtCalibrateView()
     2 {
     3     MYDELETE(m_pCircle);
     4     MYDELETE(m_pRing);
     5     MYDELETE(m_pFitCircle);
     6     MYDELETE(m_pLineRect);
     7     MYDELETE(m_pFitLine);
     8     if (m_pIplImageGray) cvReleaseImage(&m_pIplImageGray);
     9     m_pDlg = NULL;          //  LtCalibrateView*    成员变量;
    10     m_pScene = NULL;        //  QGraphicsScene*     成员变量;
    11 }
    LtCalibrateView类中含有LtCalibrateDlg* 成员变量; QGraphicsScene* 成员变量; IplImage* 成员变量 etc.
     1 #define MYDELETE(p) {if (p) { delete p; p = NULL;}} 



    在该项目中(Smart2016):
    有且只有一个 LtCalibrateDlg 型变量 和 LtCalibrateView 型变量,各自中相应类型的指针成员指向对方,共用同一个 scene ,即 俩者中的 m_pScene 指向同一份内存。(注意 view 和 dlg 中的 IplImage* 指向俩份不同内存
    而 item 变量在 view 类中分配内存。故释放空间时(以 LtCalibrateDlg 窗口关闭为触发时机),先删除 view ,在其析构中回收 Item 内存,而只将 dlg 指针 和 scene 指针 置为 NULL(未 delete, 真正的 delete 操作在dlg
    中)。而由于俩者的 IplImage* 成员指针指向不同内存,故直接删除即可。 
    ps: Qt中 delete scene 操作默认会执行 scene.clear(); 在执行相关操作时需注意


     
  • 相关阅读:
    四种方案解决ScrollView嵌套ListView问题
    Android学习笔记之Intent
    Struts2中 radio标签的详细使用方法
    Qrcode生成二维码的参数总结 及最小尺寸的测试
    java.lang.IllegalStateException: getOutputStream() has already been called for this response
    HTTP中的重定向和请求转发的区别
    SpringMVC(五)-- springmvc的系统学习之拦截器
    SpringMVC(三)-- springmvc的系统学习之数据的处理,乱码及restful
    Github上的star和fork是什么
    如何在MyEclipse上耍Chrome
  • 原文地址:https://www.cnblogs.com/lt47/p/5886540.html
Copyright © 2020-2023  润新知