首页| 论坛| 消息

标题:qgraphicsscene remove item有时候不起作用,有残影
作者:choujayyl
日期:2021-01-14 16:15
内容:

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


#1 [dorafather 01-14 16:23]
我得好像不会,不知道你怎么写得
#2 [choujayyl 01-14 16:58]
//切换新的曲线
QLineSeries * tmp = static_cast(m_chart->series()[0]);
QList 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);
}在切换显示时,有时标记清除了,不可以拖拽(正常显示可以拖拽),但确实描画了
#3 [maxlogo 01-14 21:29]
update一下场景
#4 [choujayyl 01-15 08:39]
试了,什么view、scene、item的repaint、update、viewport->update\repaint,没有用。

回复 发表
主题 版块