使用Qt在图片上绘制许多标记
Draw many markers on a picture using Qt
使用Qt在图片(本地地图)上绘制许多标记的有效方法是什么?
我正在使用QGraphicsview/scene,我需要标记是可选择和可拖动的。
我的问题可以通过使用Qt的40000芯片示例来精确地解决。在示例中,您可以放大和缩小。
当您缩小到最低级别(您可以看到所有芯片)时,一切都变得非常滞后(包括选择和拖动)。
我的代码是从芯片示例修改的,因此它具有相同的行为。我需要将许多项目(1000+)平滑地拖在一起。
关于如何改进这一点的任何建议?
我是否必须使用 OpenGL 痛苦地实现自己的绘图引擎?
关于如何改进这一点的任何建议?
从调试模式切换到发布模式可以大大改善这一点。
如果在拖动过程中仍然存在滞后,则可以禁用或限制移动部件的显示。
我尝试将以下代码添加到项目的绘制函数中:void Chip::p aint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){ 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...
}
我的理解:拖动导致的重绘成本 = LOD(细节级别)x 项目数
当我们将太多项目叠加在一起(项目数量很大)并且放大查看细节(LOD 很大)时,重绘变得昂贵。
保持低复杂度的一种可能方法是限制我们绘制的次数。我认为只画在上面的时间并保持其余部分不可见(因此,不被绘制)是有意义的。
不确定QT是否具有自动功能,可以自动以智能方式执行此操作。
相关文章:
- 尝试通过多个向量访问变量时,向量下标超出范围
- 在混合代码库中将C转换为C++时出现许多包含错误
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- g++ 说函数不存在,即使包含正确的标头
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 在CMake中使用find_package时,是否会显式包含标头
- 如何在QT中的自定义视频小工具t上绘制矩形
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- C++需要包含许多目录的标头
- 使用Qt在图片上绘制许多标记
- 如何更快地绘制许多带纹理的四边形,并保留 glScissor(或类似的东西)
- 在 OpenGL 中快速绘制许多相同的对象
- Qt5比qt4慢,用于在TabWidget中绘制许多像素图
- 绘制在wxPanel或添加许多wxControls
- 在C++标头中出现许多错误,但不确定原因