• 1627阅读
  • 4回复

[提问]qgraphicsscene remove item有时候不起作用,有残影 [复制链接]

上一主题 下一主题
离线choujayyl
 

只看楼主 倒序阅读 楼主  发表于: 2021-01-14
我使用qgraphicsscene additem 添加一个QChart ,在上面标记。使用继承QChart 子item来标记。画面切换时,先removeitem,切回来再additem。发现有时removeitem后,有残影,不可以拖拽,但scene确实描画了。使用Qt5.9.5,又测试了5.15.2一样问题。经过长时间测试,发现是改变QChart坐标范围引起,所有item都尝试调用prepareGeometryChange,也没有作用。又发现resize一下残影就消失,但这不是正规逻辑方式。有谁碰见过吗?

有兴趣测试的看github 测试代码 GitHub
离线dorafather

只看该作者 1楼 发表于: 2021-01-14
我得好像不会,不知道你怎么写得
离线choujayyl

只看该作者 2楼 发表于: 2021-01-14

    
  1. //切换新的曲线
  2.     QLineSeries * tmp = static_cast<QLineSeries *>(m_chart->series()[0]);
  3.     QList<QPointF> dataPointList;
  4.     //设置新的坐标范围
  5.     m_chart->axisX()->setRange(0,dataVec[dataVec.size()-1].x());
  6.     m_chart->axisY()->setRange(-qAbs(yMax)*1.2f, qAbs(yMax)*1.2f);
  7.     tmp->replace(dataPointList);
  8.     
  9.     
  10.     //删除上次qchart标记类型,m_calloutsList是保留多个曲线中标记flag 类型
  11.     for(auto& item : m_calloutsList[nDataIndex])
  12.     {
  13.         //item.prepareGeomtryChange 尝试调用无效
  14.         scene()->removeItem(item);
  15.     }
  16.     //添加新的曲线标记flag显示
  17.     for(auto& item2 : m_calloutsList[nDataIndex])
  18.     {
  19.     //item2.prepareGeomtryChange 尝试调用无效
  20.         scene()->addItem(item2);
  21.     }
在切换显示时,有时标记清除了,不可以拖拽(正常显示可以拖拽),但确实描画了
离线maxlogo

只看该作者 3楼 发表于: 2021-01-14
update一下场景
个人博客:
简书:https://www.jianshu.com/u/14fa805306bd
CSDN:https://blog.csdn.net/qq10097355
思否:https://segmentfault.com/u/lowbees/articles
离线choujayyl

只看该作者 4楼 发表于: 2021-01-15
试了,什么view、scene、item的repaint、update、viewport->update\repaint,没有用。
快速回复
限100 字节
 
上一个 下一个