Ubuntu Qt配置QVTKWidget控件

it2022-05-05  115

1、编译VTK-7.1.0

下载VTK,解压后在解压文件中创建build文件

mkdir build cd build

用cmake进行编译,注意一定要编译release版本,否则不会生成QVTKWidget所需要的动态库libQVTKWidgetPlugin.so

编译命令如下:

cmake -DVTK_QT_VERSION:STRING=5 \ -DQT_QMAKE_EXECUTABLE:PATH=/opt/Qt5.11.2/5.11.2/gcc_64/bin/qmake \ -DVTK_Group_Qt:BOOL=ON \ -DCMAKE_PREFIX_PATH:PATH=/opt/Qt5.11.2/5.11.2/gcc_64/lib/cmake \ -DBUILD_SHARED_LIBS:BOOL=ON .. make -j sudo make isntall

参考官方教程:https://vtk.org/Wiki/VTK/Building/Linux

2、加载动态库

安装完之后使用sudo find / -name libQVTKWidgetPlugin.so动态链接库的路径。 然后将它分别copy至QT的安装目录下:

/opt/Qt5.11.2/5.11.2/gcc_64/plugins/designer /opt/Qt5.11.2/Tools/QtCreator/lib/Qt/plugins/designer

即可。此时打开designer和QTCreator都会有对应的插件。效果如下图所示:  

注意

当出现undefined reference to `QVTKWidget::QVTKWidget(QWidget*, QFlags<Qt::WindowType>)'的错误时请引入:libvtkGUISupportQt-8.2这个库!

Qt VTK编程过程遇到的错误

1、QT编译时报如下错误:error while loading shared libraries: lib***.so

error while loading shared libraries: lib***.so.1: cannot open shared object file: No such file or directory

原因是没有设置环境变量,解决办法:

然后在ld.so.conf中添加动态链接库的目录(我的是),如下:

然后运行如下命令更新动态链接库目录:

 2、编译时报:link error:no override found for ‘vtkRenderWindow'。

添加如下内容

#include <vtkAutoInit.h>//VTK_MODULE_INIT(vtkRenderingOpenGL2); //这个必须要加,不然会报错//VTK_MODULE_INIT(vtkInteractionStyle);

3、Warning: In D:\VTK\VTK-6.3.0\Rendering\Core\vtkInteractorStyleSwitchBase.cxx, line 43  vtkInteractorStyleSwitchBase (00000293C389B540): Warning: Link to vtkInteractionStyle for default style selection.  

添加:

VTK_MODULE_INIT(vtkInteractionStyle)

 

4、ERROR: In F:\VTK\VTK-7.0\Rendering\Core\vtkTextMapper.cxx, line 543vtkTextMapper (000001215D0AA770): Could not locate vtkTextRenderer object.

添加

VTK_MODULE_INIT(vtkRenderingFreeType)

5、.... VTK-7.1.1/GUISupport/Qt/QVTKInteractor.cxx, line 147 QVTKInteractor (0x240be90): QVTKInteractor cannot control the event loop.

代码如下:

renderWindowInteractor = ui->qvtkWidget->GetInteractor(); ui->qvtkWidget->GetInteractor()->SetRenderWindow(renderwind); style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New(); style->SetDefaultRenderer(renderer); ui->qvtkWidget->SetRenderWindow(renderwind); ui->qvtkWidget->GetRenderWindow()->GetInteractor()->SetInteractorStyle(style); ui->qvtkWidget->GetRenderWindow()->Render(); ui->qvtkWidget->GetRenderWindow()->GetInteractor()->Initialize(); ui->qvtkWidget->GetRenderWindow()->GetInteractor()->Start(); ui->qvtkWidget->update(); 编译时报错: ERROR: .../VTK-7.1.1/GUISupport/Qt/QVTKInteractor.cxx, line 147 QVTKInteractor (0x240be90): QVTKInteractor cannot control the event loop. qvtkWidget会在创建时完成Interactor创建和开启,保证其对窗口的控制,因此 ui->qvtkWidget->GetRenderWindow()->GetInteractor()->Initialize(); ui->qvtkWidget->GetRenderWindow()->GetInteractor()->Start(); 这两句话是不必要的。删除这两句话后,程序不再产生vtk错误窗口。同样在QVTKOpenGLWidget也会出这样的问题。

转载于:https://www.cnblogs.com/kerngeeksund/p/11197307.html


最新回复(0)