• 关于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(); 在执行相关操作时需注意


     
  • 相关阅读:
    【centos6.5 安装 node.js + npm】
    【钉钉PC】PC端钉钉清除缓存
    【laravel5.4】中jquery的post Ajax提交
    python 设计模式之中介者模式
    python 设计模式之备忘录模式
    python 设计模式之观察者模式
    python 设计模式之策略模式
    23种设计模式有哪些,不带定义,不带例子
    python 设计模式之模板方法模式
    python 设计模式之访问者模式
  • 原文地址:https://www.cnblogs.com/lt47/p/5886540.html
Copyright © 2020-2023  润新知