如何正确调用此CGAL的QT接口函数?
How to call this CGAL's QT interface function correctly?
我的环境是Ubuntu 14.04上的CGAL 4.5和QT5。
我正在学习如何使用CGAL的Qt接口来渲染几何对象,如点、线、段。网上似乎没有使用这个框架的例子,所以我现在很挣扎。
我似乎无法使我的测试代码正常工作。它进行编译,但抛出seg错误。
以下是通过QtCreator创建的QTwidgets应用程序中的MainWindow.cpp
文件中的代码。
#include <iostream>
#include <CGAL/Simple_cartesian.h>
#include <CGAL/Qt/PointsGraphicsItem.h>
#include <CGAL/Qt/SegmentsGraphicsItem.h>
#include <vector>
typedef CGAL::Simple_cartesian<double> Kernel;
typedef Kernel::Point_2 Point_2;
typedef Kernel::Segment_2 Segment_2;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
std::vector<Point_2> pts;
pts.push_back(Point_2(1,1));
pts.push_back(Point_2(10,10));
CGAL::Qt::PointsGraphicsItem< std::vector<Point_2> > graphical_points(&pts);
}
最后一行似乎是问题行。我的代码不断抛出segfault此时。消息为
The inferior stopped because it received a signal from the operating system.
Signal name : SIGSEGV
Signal meaning : Segmentation fault
我在这个函数调用中做错了什么?我知道我必须在图形场景中添加点,但目前这并不重要。
理想情况下,当代码运行时,它应该显示两个点,一个在(1,1),另一个在在(10,10),一旦我将这些点添加到场景中。
这是Pastebin上完整的PointsGraphicsItem.h
文件的链接。
您应该创建具有新点和空点向量的图形项,并调用scene.addItem(..)
。当用点填充矢量时,在将其连接到PointsGraphicsItem::modelChanged()
后发出信号
如果我是你,我会做一个现有的演示,比如Polygon_2演示并一点一点地修改。
注意,演示并不是我们努力的地方,因为CGAL主要是关于几何数据结构和算法。
好吧,现在我明白你的代码的问题在哪里了。向量pts
的生命周期只是构造函数MainWindow::MainWindow(..)
。当PointsGraphicsItem
的绘制方法尝试绘制这些点时,这些点已不存在。
CGAL::Qt::PointsGraphicsItem< std::vector<Point_2> > graphical_points(&pts);
在上面的行中,您正在传递局部变量pts
的地址。这是不允许的。另外,不要忘记在.pro
项目文件中设置以下标志。
LIBS += -lCGAL -lgmp
QMAKE_CXXFLAGS += -frounding-math
相关文章:
- 如何在Qt中使用Android上的USB OTG串行接口?
- Qt Quick - 如何在 qml 接口中使用继承自 QQuickPaintedItem 的 c++ 类?
- 连接来自 C++98 接口的 Qt 插槽和信号,无需 Qt、STL 或 Boost
- 使用具有新信号槽语法的Qt插件系统在接口类中声明信号
- Qt - 通过 xml 配置接口
- Arduino -QT C 串行接口
- Qt连接到插槽辅助接口
- QT应用程序接口冻结
- 如何使用Qt在Windows上检查网络接口类型是以太网或无线
- 如何使用OpenGL在QT接口上显示Iplimage流
- Qt插件:有没有办法列出插件实现的所有接口
- 我可以在Qt应用程序中使用现有的本机Windows COM接口吗
- 如何正确调用此CGAL的QT接口函数?
- 启用接口/设置来自C++(使用Qt)和Linux的IP
- C++非QT接口和QtNetwork
- Qt-DBus:实现多个接口的注册对象
- 如何通过Python C api在QT和Python之间进行接口
- C++接口类导致函数调用(Qt)不明确
- 连接接口中声明的QT信号
- QT检查接口是否真实