找回密码
 立即注册
收起左侧

Qt指针及内存释放问题

2
回复
14426
查看
[复制链接]
累计签到:22 天
连续签到:1 天
来源: 2015-5-14 21:35:59 显示全部楼层 |阅读模式
2Qter豆
流程是这样:相机采集图像到内存m_pRawBuffer,然后在label上显示出来
第一段代码是这样,不存在内存问题
  1. void MainWindow::on_start_clicked()
  2. {
  3.     // TODO: Add your command handler code here
  4.     HVSTATUS status = STATUS_OK;
  5.     /*
  6.      *        启动数字摄像机采集图像到内存
  7.      */
  8.     uchar *ppBuf[1];
  9.     ppBuf[0] = m_pRawBuffer;
  10.     status = HVStartSnap(m_hhv, ppBuf,1);
  11.     HV_VERIFY(status);
  12.     if (HV_SUCCESS(status)) {
  13.         m_bStart = TRUE;
  14.     }
  15.   QTimer *timer=new QTimer(this);
  16.   connect(timer,SIGNAL(timeout()),this,SLOT(showcamera()));
  17.   timer->start(100);

  18. }
  19. void MainWindow::showcamera()
  20. {
  21.    QImage image(m_pRawBuffer,752,480,QImage::Format_Indexed8);
  22.    QPixmap pixmap = QPixmap::fromImage(image);
  23.    ui->label->move(30,30);
  24.    ui->label->resize(400,400);
  25.    ui->label->setPixmap(pixmap);
  26. }
复制代码
但是当我把相机单独写成一个类,然后在MainWindow里调用时候就出问题了,内存越来越大,只有当关闭mainwindow时才释放,代码如下:
  1. //开始采集图像
  2. void MainWindow::on_actionStart_triggered()
  3. {
  4.     camera.onSnapStart();
  5.     QTimer *timer=new QTimer(this);
  6.     ShowCamera();
  7.     connect(timer,SIGNAL(timeout()),this,SLOT(ShowCamera()));
  8.     timer->start(100);
  9. }


  10. //显示采集的图像
  11. void MainWindow::ShowCamera()
  12. {
  13.     QImage image(aa->m_pRawBuffer,1000,700,QImage::Format_Indexed8);
  14.     QPixmap pixmap;
  15.     pixmap = QPixmap::fromImage(image);
  16.     if(ui->action->isChecked())
  17.     {
  18.     QLabel *label=new QLabel(this);
  19.     label->move(0,25);
  20.     label->resize(1000,700);
  21.     label->setPixmap(pixmap);
  22.     label->show();
  23.     }
  24.      else
  25.     {
  26.     MyLabel *label=new MyLabel(this);
  27.     label->move(0,25);
  28.     label->resize(1000,700);
  29.     label->setPixmap(pixmap);
  30.     label->show();
  31.     }
  32. }
复制代码
问题出在哪里?是相机存到内存的图片没有释放的原因还是因为这个new出来的MyLabel(子类化的一个QLabel)指针的问题?怎么解决?

最佳答案

查看完整内容

在MainWindow::ShowCamera()函数中,每100ms就new一个label,label的父类是MainWindow,只有当MainWindow关闭时才释放。 可以把label定义成MainWindow的成员变量啊,在构造函数new一次就可以了吧。
回复

使用道具 举报

累计签到:16 天
连续签到:1 天
2015-5-14 21:36:00 显示全部楼层
在MainWindow::ShowCamera()函数中,每100ms就new一个label,label的父类是MainWindow,只有当MainWindow关闭时才释放。
可以把label定义成MainWindow的成员变量啊,在构造函数new一次就可以了吧。
回复

使用道具 举报

累计签到:22 天
连续签到:1 天
2015-5-15 08:29:51 显示全部楼层
是的,早上洗脸的时候突然意识到了,还基本功太差了,这种基础问题还纠结一晚上,刚才改过后就可以了。也谢谢你的回答。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了