zoukankan      html  css  js  c++  java
  • 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也会出这样的问题。

  • 相关阅读:
    参与 Microsoft 开发者社区,发挥自己的技术价值。
    Silverlight 与HTML元素交互操作
    冯瑞涛的新浪技术微博正式上线!欢迎您的关注。
    Silverlight Object 标签属性介绍、初始化参数的设置和获取、客户端系统信息获取
    Visual Studio 2010 RC 公共下载开放,开发者可以通过下面的地址下载
    C# Socket 同步通信与异步通信 示例
    解决 Visual Studio 打开项目 “Project could not be opened because Microsoft Visual C# 2008 compiler could not be created” 报错
    Silverlight 与javaScript互操作
    Windows Mobile 6.5 设置 QQ 通过 WiFi 连接登录
    黑龙江.Net俱乐部在博客园安家了,欢迎您的加入、关注和参与我们的线下活动。
  • 原文地址:https://www.cnblogs.com/Glucklichste/p/11197307.html
Copyright © 2011-2022 走看看