查看完整版本: [-- qgraphicsscene remove item有时候不起作用,有残影 --]

QTCN开发网 -> Qt基础编程 -> qgraphicsscene remove item有时候不起作用,有残影 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

choujayyl 2021-01-14 16:15

qgraphicsscene remove item有时候不起作用,有残影

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

有兴趣测试的看github 测试代码 GitHub

dorafather 2021-01-14 16:23
我得好像不会,不知道你怎么写得

choujayyl 2021-01-14 16:58

    
  1. //切换新的曲线
        QLineSeries * tmp = static_cast<QLineSeries *>(m_chart->series()[0]);
        QList<QPointF> dataPointList;
        //设置新的坐标范围
        m_chart->axisX()->setRange(0,dataVec[dataVec.size()-1].x());
        m_chart->axisY()->setRange(-qAbs(yMax)*1.2f, qAbs(yMax)*1.2f);
        tmp->replace(dataPointList);
        
        
        //删除上次qchart标记类型,m_calloutsList是保留多个曲线中标记flag 类型
        for(auto& item : m_calloutsList[nDataIndex])
        {
            //item.prepareGeomtryChange 尝试调用无效
            scene()->removeItem(item);
        }


        //添加新的曲线标记flag显示
        for(auto& item2 : m_calloutsList[nDataIndex])
        {
        //item2.prepareGeomtryChange 尝试调用无效
            scene()->addItem(item2);
        }
在切换显示时,有时标记清除了,不可以拖拽(正常显示可以拖拽),但确实描画了

maxlogo 2021-01-14 21:29
update一下场景

choujayyl 2021-01-15 08:39
试了,什么view、scene、item的repaint、update、viewport->update\repaint,没有用。


查看完整版本: [-- qgraphicsscene remove item有时候不起作用,有残影 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled