• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Gesündeste
博客园    首页    新随笔    联系   管理    订阅  订阅
Ubuntu Qt配置QVTKWidget控件

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 \
-DCMAKE_BUILD_TYPE=RELEASE \
-DBUILD_SHARED_LIBS:BOOL=ON ..

make -j 
sudo make install

参考官方教程: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这个库!

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 543
vtkTextMapper (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也会出这样的问题。

posted on 2019-07-16 20:30  Gesündeste  阅读(2341)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3