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);