使用Qt在图片上绘制许多标记

时间:2016-02-26 17:28:02

标签: c++ qt google-maps

使用Qt在图片(本地地图)上绘制许多标记的有效方法是什么?

我正在使用QGraphicsview / scene,我需要标记可选择和拖动。

使用Qt的40000芯片示例可以准确地重新解决我的问题。在该示例中,您可以放大和缩小。

当你缩小到最低级别(你可以看到所有筹码)时,一切都变得非常困难(包括选择和拖动)。

我的代码是从芯片示例修改的,因此它具有相同的行为。 我需要顺利地拖动很多项目(1000+)。

有关如何改善这一点的任何建议?

我是否必须使用OpenGL痛苦地实现自己的绘图引擎?

2 个答案:

答案 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是否具有自动执行此功能的自动功能。