Qt图形绘制

Qt Graph Drawing

本文关键字:绘制 图形 Qt      更新时间:2023-10-16

我最近开始开发一个需要可视化图形的项目,我正在寻找一个不错的算法来解决这个问题。

我画的图是模型数据流,所以一个合理的图可以从左到右或从上到下。当然,它们是有向的,大多是非循环的——也就是说,可能有一些后边缘,但这些后边缘的比例很小,如果有DAG作为输入可以大大提高运行时间,我很乐意在计算顶点位置之前删除这些后边缘。

我在这个项目中使用C++和Qt,并且已经非常熟悉Qt提供的Elastic Nodes和Diagram Scene示例。如果有人看过KCacheGrind,我想做的就是类似于它的调用图可视化。

我目前的尝试包括一种原始算法,该算法根据每个节点与根的最小距离将其分配给一个层,然后尝试以最小化边缘交叉的方式将节点定位在每个层内。我无法正确地实现最后一部分,我认为这个问题是NP难题。

我正在寻找的是关于过去使用何种算法来有效解决这个问题的指导。

我建议使用QGraphicsScene来实现有向无环图。此外,请查看这些链接以帮助您实现:

  • https://github.com/qknight/automate
  • http://invalidmagic.wordpress.com/2009/12/10/qgraphicsscene-used-as-a-qabstractitemmodel/
  • http://socnetv.sourceforge.net/