vs2017下,VTK 结合 Qt使用 vtkOrientationMarkerWidget 、vtkAxesActor创建坐标卡死,报异常,不显示问题

vs2017下,VTK 结合 Qt使用 vtkOrientationMarkerWidget 、vtkAxesActor创建坐标卡死,报异常,不显示问题

左下角那个坐标系,代码如下:
vtkSmartPointer axes = vtkSmartPointer::New();
vtkSmartPointer widget = vtkSmartPointer::New();
widget->SetOutlineColor(0.9300, 0.5700, 0.1300);
widget->SetOrientationMarker(axes);
widget->SetInteractor(iren);
widget->SetEnabled(true);
widget->InteractiveOn();
在控制台通过vtkRenderWindowInteractor交互可以显示出来。
但是在QVTKWidget中,代码调整如下:
widget->SetInteractor(widget_vtk->GetInteractor());

卡死

主要是没有加下面这句话就会卡住:
widget->SetEnabled(true);

报异常

使用QT结合VTK使用vtkOrientationMarkerWidget、vtkAxesActor可能会报异常
需要在main函数外面,添加下面这句话:

VTK_MODULE_INIT(vtkRenderingFreeType);

举例:

#include <QtWidgets/QApplication>
#include <QtWidgets/QApplication>
#include <QMainWindow>
#include <vtkAutoInit.h>
#include <vtkOutputWindow.h>
#include <chrono>

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
//下面这句话就可以解决QT结合VTK使用vtkOrientationMarkerWidget、vtkAxesActor报异常的问题----
//----(上面两句也很重要,就是说这三句最好都加上为妙)
VTK_MODULE_INIT(vtkRenderingFreeType);

int main(int argc, char *argv[])
{
    std::srand(static_cast<int>(std::time(NULL)));
	vtkOutputWindow::SetGlobalWarningDisplay(0);
    QApplication a(argc, argv);
    PointCloudODP w;
    w.show();
	a.exec();//用来响应qt事件和消息
}

不显示可能是由于没有加:
->SetEnabled(true);
这个问题造成的,加了这句话又会报异常,所以需要再加上前面说的这句话:
VTK_MODULE_INIT(vtkRenderingFreeType);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值