在QGraphicsItem这种绘图机制下加载大量数据时时间过长

DHD 2012-11-27 05:53:50
我做了一个QGraphicsView用来显示大量的图形数据,数据量大概能达到10万条以上。
我试过在程序里加载数十万个QGraphicsItem,发现在绘制的时候,耗费的时间很长,想问一下各位大侠有没有什么好的处理方法。

我想了一种方法,由于QGraphicsView框架每次只绘制可见的图元,当QGraphicsView框架更新视图中的图元时,调用我的一个后台管理接口,用来更新一些后台数据,然后QGraphicsView框架再调用每个图元的Paint,不知有没有这种方法,主要我不想一次加载所有的QGraphicsItem

请各位大侠不吝赐教
...全文
1074 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiachm 2012-11-28
  • 打赏
  • 举报
回复
这个Qt的Demo对你有帮助吗?40000 Chips
DHD 2012-11-28
  • 打赏
  • 举报
回复 1
最开始的时候,我使用了这样的一种方法来进行处理: QGraphicsView每次更新视图内的图元时,会调用所有图元的paint接口,我在后台有一个数据管理类,当QGraphicsView调用图元的paint时,被调用的图元会先向我的数据管理类请求更新自己的后台数据,然后在得到新的后台数据后,开始自己的绘制动作。 这样做之后,我发现每次更新视图的效率会变的低下,跟人一种很不流畅的感觉。 所以我在想,QGraphicsView每次更新视图是不是应该要先计算出当前的视图区域应当显示出多少个图元,而后才驱动这些图元进行自我绘制。如果是这样,当视图计算出当前试图区域中应有多少个图元时,会不会发出一些信号,这样我就可以处理这个信号,来达到更新我后台数据的目的,这样我就可以将原来在paint接口中执行的更新后台数据的工作,转移到这个信号的处理中去,从而大大的提高的绘图效率
feilinhe 2012-11-28
  • 打赏
  • 举报
回复
QGraphicsView对于实时绘制加载大量QGraphicsItem数据,目前来说是比较慢的,LZ所想的那种方法是可行的(游戏里面叫做裁剪,OpenGL是有这种东西的),不过这种方法QGraphicsView目前还没有这种机制得自己去实现
彩阳 2012-11-27
  • 打赏
  • 举报
回复
可以的,你可以开一个线程处理你的数据,一旦数据更新完成即可更新。但是如此大的数据量在初次载入的时候的确绘制很慢。OpenGL对于如此大的数据量也挺吃力的。

16,815

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧