Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Qt在图片上绘制多个标记_C++_Qt_Google Maps - Fatal编程技术网

C++ 使用Qt在图片上绘制多个标记

C++ 使用Qt在图片上绘制多个标记,c++,qt,google-maps,C++,Qt,Google Maps,使用Qt在图片(本地地图)上绘制多个标记的有效方法是什么 我正在使用QGraphicsview/scene,我需要可以选择和拖动的标记 我的问题可以通过使用Qt的40000个芯片的例子得到准确的回答。在本例中,可以放大和缩小 当你缩小到最低的水平(在那里你可以看到所有的芯片),一切都变得痛苦的滞后(包括选择和拖动) 我的代码是根据chips示例修改的,因此它具有相同的行为。 我需要将多个项目(1000+)平滑地拖到一起 对如何改进这一点有什么建议吗 我必须痛苦地使用OpenGL实现自己的绘图引擎

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

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

我的问题可以通过使用Qt的40000个芯片的例子得到准确的回答。在本例中,可以放大和缩小

当你缩小到最低的水平(在那里你可以看到所有的芯片),一切都变得痛苦的滞后(包括选择和拖动)

我的代码是根据chips示例修改的,因此它具有相同的行为。 我需要将多个项目(1000+)平滑地拖到一起

对如何改进这一点有什么建议吗

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

对如何改进这一点有什么建议吗

从调试模式切换到发布模式可以大大改善这一点

如果拖动过程中仍然存在延迟,则可以禁用或限制运动部件的显示

对如何改进这一点有什么建议吗

从调试模式切换到发布模式可以大大改善这一点


如果拖动过程中仍然存在延迟,则可以禁用或限制运动部件的显示。

我尝试将以下代码添加到项目的绘制功能中: void Chip::paint(QPainter*painter、const QStyleOptionGraphicsItem*选项、QWidget*小部件) { Q_未使用(小部件)

QListtempList=this->scene()->items(this->boundingRect(),Qt::IntersectsItemShape,Qt::downingorder,QTransform());
if(templast.size()>5)
{
对于(int index=4;indexsetVisible(false);
}
此->场景()->更新();
}
//…示例中的其余绘制代码如下所示。。。
}
我的理解是: 拖动导致的重画成本=LOD(详细等级)x项目数

当我们将太多的项目叠加在一起(项目数量很大)并放大查看细节(LOD很大)时,重画会变得昂贵

保持低复杂性的一种可能方法是限制我们绘制的次数。我认为只画上面的时间是有意义的,而保持其余的时间不可见(因此,不要画)


不确定QT是否有自动功能,以自动和智能的方式执行此操作。

我尝试将以下代码添加到项目的绘制功能中: void Chip::paint(QPainter*painter、const QStyleOptionGraphicsItem*选项、QWidget*小部件) { Q_未使用(小部件)

QListtempList=this->scene()->items(this->boundingRect(),Qt::IntersectsItemShape,Qt::downingorder,QTransform());
if(templast.size()>5)
{
对于(int index=4;indexsetVisible(false);
}
此->场景()->更新();
}
//…示例中的其余绘制代码如下所示。。。
}
我的理解是: 拖动导致的重画成本=LOD(详细等级)x项目数

当我们将太多的项目叠加在一起(项目数量很大)并放大查看细节(LOD很大)时,重画会变得昂贵

保持低复杂性的一种可能方法是限制我们绘制的次数。我认为只画上面的时间是有意义的,而保持其余的时间不可见(因此,不要画)


不确定QT是否具有自动功能,以自动和智能的方式执行此操作。

没有图片是否相同?你有一些代码要显示吗?是的,没有图片,相同。我的代码相当直接,实际上我只是从qt复制了“chips”示例,然后我将芯片修改成一个小正方形。然后用鼠标选择300多个芯片并拖动它们。它也变得相当滞后。该示例很快,但当您将项目更改为可拖动时变得缓慢?在该示例中,项目从一开始就是可拖动的。即使我没有更改任何内容,当我尝试拖动300多个项目时,速度也相当慢。如果您的问题在未修改的示例中确实可见,您应该在问题中这样说。它将被其他人复制,这可能会有所帮助。并明确说明它是否与静态绘图或拖动绘图有关。没有图片是否相同?你有一些代码要显示吗?是的,没有图片,相同。我的代码相当直接,实际上我只是从qt复制了“chips”示例,然后我将芯片修改成一个小正方形。然后用鼠标选择300多个芯片并拖动它们。它也变得相当滞后。该示例很快,但当您将项目更改为可拖动时变得缓慢?在该示例中,项目从一开始就是可拖动的。即使我没有更改任何内容,当我尝试拖动300多个项目时,速度也相当慢。如果您的问题在未修改的示例中确实可见,您应该在问题中这样说。它将被其他人复制,这可能会有所帮助。并明确说明是否与拖动过程中的静态绘图相关。
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...
}