• 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:VTKVTK-6.3.0RenderingCorevtkInteractorStyleSwitchBase.cxx, line 43  
    vtkInteractorStyleSwitchBase (00000293C389B540): Warning: Link to vtkInteractionStyle for default style selection.  

    添加:

    VTK_MODULE_INIT(vtkInteractionStyle)

    4、ERROR: In F:VTKVTK-7.0RenderingCorevtkTextMapper.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也会出这样的问题。

  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    小花梨的三角形(暴力上下扫三角形)
    调手表(bfs)
    Educational Codeforces Round 65 (Rated for Div. 2)(ACD)B是交互题,不怎么会
    C. News Distribution(并查集)
    Codeforces Round #560 (Div. 3)A-E
  • 原文地址:https://www.cnblogs.com/Glucklichste/p/11197307.html
Copyright © 2020-2023  润新知