Qt交互渲染点、线、线段

Rendering points, lines, segments interactively in Qt

我是 Qt 的新手,我想使用 Qt 使用 CGAL 制作交互式几何程序。我希望用户使用鼠标输入点、线段,然后按下按钮让 CGAL 算法处理输入。

我的环境是 CGAL 4.5、Qt 5.6QtCreator 3.6.1 Ubuntu 14.04机器.

CGAL 内置了对其对象的支持 使用 QtGraphicsViewFramework 呈现 (http://doc.cgal.org/latest/GraphicsView/index.html )

我不知道如何将 CGAL 对象——点、线、射线、多边形——渲染到 Qt 上 window。我在上面链接到的页面假定您了解 Qt 才能使应用程序正常工作,因此对 Qt 初学者没有帮助。

到目前为止,我已经使用QtCreator 创建了一个Qt widgets 应用程序项目。据我所知,我需要通过将不同类型的小部件拖放到 QtCreator 中以图形方式修改 mainwindow.ui 文件,然后将调用 CGAL 函数的信号映射到任何绘图 canvas 小部件的插槽上. (这是正确的吗?我对信号和槽机制犹豫不决)

我的问题是..我应该把哪个小部件作为绘图放在window上canvas?两个相关的小部件似乎是 GraphicsViewOpenGL widgets 在 DisplayWidgets 菜单下。但是我该如何使用它们呢?

我没有CGAL经验,但我可以给你一些Qt相关的提示:

  1. 使用QGraphicsView+QGraphicsScene。如果需要,您可以像这样启用 OpenGL 支持:

    QGraphicsView view = new QGraphicsView(parentWindow);
    view->setViewport(new QOpenGLWidget(view));
    
  2. 要绘制 CGAL 对象,您必须使用提供的 图形项 classesCGAL::Qt::TriangulationGraphicsItemCGAL::Qt::VoronoiGraphicsItem , ...) 或从 CGAL::Qt::GraphicsItem 派生您自己的。要将项目添加到场景,请使用 QGraphicsScene::addItem() 方法。

  3. 为了导航(平移 + 缩放)视图,CGAL 提供了 CGAL::Qt::GraphicsViewNavigation class。这是如何使用它:

     CGAL::Qt::GraphicsViewNavigation* navFilter = new  CGAL::Qt::GraphicsViewNavigation(view);
     view->viewport()->installEventFilter(navFilter);