QGraphicsView刷新多次后内存溢出问题

浅笑铅华 2018-03-21 09:38:04
在mainwindows里创了个myview(QGraphicsView)然后每0.5s调用update()刷新一次,基本上刷新100多次就内存溢出了,不知道为什么(好像是内存溢出,因为myview一下就什么都不显示了,但没报错)。
void Mymainwindow::paintEvent(QPaintEvent *)
{
QImage image;
image = QImage(800, 600, QImage::Format_RGB32);//画布的初始化大小设为600*500,使用32位颜色
myview->setCacheMode(myview->CacheBackground);
QColor backColor = qRgb(255, 255, 255); //画布初始化背景色使用白色
image.fill(backColor);//对画布进行填充
QPainter painter(&image);
painter.setRenderHint(QPainter::Antialiasing, true);//设置反锯齿模式,好看一点

my::data data = boost::shared_ptr<std::vector<my::datamember>>(new std::vector<my::datamember>);
ServiceData.copydatato(data);//获取数据,数据肯定没问题
painter.setPen(QColor(255, 0, 0));
for (int x = 0; x <data->size(); x++)
{
painter.drawPoint((*data)[x].x* 10 + 400, (*data)[x].y * 10 + 300);
}

painter.drawLine(300, 300, 500, 300);
painter.drawLine(400, 200, 400, 400);
QGraphicsScene *scene = new QGraphicsScene;
scene->addPixmap(QPixmap::fromImage(image));
myview->setScene(scene);
myview->show();
}
...全文
1088 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
最明显的问题是 QGraphicsScene *scene = new QGraphicsScene; scene->addPixmap(QPixmap::fromImage(image)); 这里反复创建场景,不建议这样做,这样做效率很低。应该在类成员中保留一个场景指针,每次直接清空。 若坚持这样,建议在myview->setScene(scene);之前,先把老的scene->deleteLater() ------------------- 此外,就是那个shared_ptr部分,由于不清楚外围的构造,暂时不能确定内存泄漏。
萧洛 2018-03-21
  • 打赏
  • 举报
回复
new两次却没有delete,内存不泄漏才怪。 如果是要重复利用的内存,可以在构造函数中申请一次就够了。

16,818

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧