使用Qt在图片(本地地图)上绘制许多标记的有效方法是什么?
我正在使用QGraphicsview / scene,我需要标记可选择和拖动。
使用Qt的40000芯片示例可以准确地重新解决我的问题。在该示例中,您可以放大和缩小。
当你缩小到最低级别(你可以看到所有筹码)时,一切都变得非常困难(包括选择和拖动)。
我的代码是从芯片示例修改的,因此它具有相同的行为。 我需要顺利地拖动很多项目(1000+)。
有关如何改善这一点的任何建议?
我是否必须使用OpenGL痛苦地实现自己的绘图引擎?
答案 0 :(得分:3)
有关如何改善此事的任何建议吗?
从调试模式切换到发布模式可以大大改善 。
如果在拖动过程中仍然存在延迟,则可以禁用或限制显示运动部件。
答案 1 :(得分:1)
我尝试将以下代码添加到项目的绘图功能中: void Chip :: paint(QPainter * painter,const QStyleOptionGraphicsItem *选项,QWidget *小部件) { Q_UNUSED(插件);
QList<QGraphicsItem*>tempList = this->scene()->items(this->boundingRect(),Qt::IntersectsItemShape,Qt::DescendingOrder,QTransform());
if(tempList.size()>5)
{
for(int index = 4; index < tempList.size() ; index ++)
{
tempList.at(index)->setVisible(false);
}
this->scene()->update();
}
//...rest of the paint code in the example goes here...
}
我的理解: 重绘的成本来自drag = LOD(详细程度)x项目数
当我们将太多项目叠加在一起(项目数量很大)并且我们放大查看详细信息(LOD很大)时,重绘会变得昂贵。
保持低复杂性的一种可能方法是限制我们绘制的次数。我认为只绘制顶部的时间并保持其余部分不可见(因此,不要绘制)是有意义的。
不确定QT是否具有自动执行此功能的自动功能。