centos7 搭建vtk7.1.1+Qt开发环境+运行编译工程

2023-05-16

一、CMAKE安装

        vtk必须用cmake编译,但是,由于高版本的cmake没有支持qt5的gui,所以选择低版本的,但是低版本的必须得依赖于qt4,而qt4相较于qt5,将qt库和desginer分开的,必须要分别编译安装,过程没几个小时下不来。

        笔者当时折腾了很久,最终解决了。

        终端输入指令,直接安装cmake3和cmake3-gui。

yum list cmake3*

        就可以看到cmake3,cmake3-gui,还有cmake3-data。

yum install cmake3*

如果找不到cmake3,可以输入以下两个指令

yum install -y epel-release

yum install -y cmake3

此时,已安装好cmake3,要知道官网下载源码编译巨麻烦,还编译很长时间,这版本直接下载给你安装了,跳过那些麻烦的步骤...

二、 qt安装

        官网随便找个qt5版本的下载就完事了,笔者这里是下载5.10.1版本。

        https://download.qt.io/

        在 official_releases/   中选择一个版本下载即可,不建议qt6啊。

        一路默认安装过去,问题不大,相较于qt4的安装,qt5,直接将creator和qt库一起安装了,不可谓不人性化。

        至于,编译器什么的,qt会自动检测。

三、安装相关依赖

        安装vtk之前,需要装很多的依赖。话不多说,装!

       yum install libXt-devel

        可能还缺相关依赖,报错之后,上网搜,再安装相关依赖。

 四、安装vtk

        Download | VTK

        网址下载vtk,笔者试了9.2和8.2,都没成功,最后下载7.1版本的,成功了,至于另外两个,可能是哪里配置错了。

        1.创建一个文件夹名为vtk7.1.1放在桌面,并在文件夹里面新建一个名为build的文件夹。

        

        2.下载VTK-7.1.1.tar.gz​​​​​​​  和 ​​​​​​​VTKData-7.1.1.tar.gz​​​​​​​​​​​​​   这两个包,然后可以解压到vtk7.1.1中。

tar -zxvf VTK-7.1.1.tar.gz​​​​​​​
tar -zxvf VTKData-7.1.1.tar.gz​​​​​​​​​​​​​ 

        

 html是下载的vtkDocHtml-7.1.1.tar.gz​​​​​​​​​​​​​​​ 这个包,里面是vtk的文档,可下可不下。

此外,还需要在/usr/local/目录下新建一个名为vtk7.1.1的文件夹。

3.进入build文件夹下,打开终端,输入

sudo cmake3-gui

 4.在where is the source code 中选择你解压源码的路径,笔者这里是/home/用户名/vtk7.1.1/VTK-7.1.1

在where to build the binaries 中选择之前新建的build文件夹路径,笔者这里是/home/用户名/vtk7.1.1/build

然后点击configure

5.此时,会产生许多红色的配置,需要你来配置,勾选Grouped和Advanced,在search中输入qt

        5.1 先在VTK中找到VTK_QT_VERSION中选择5,这里表示qt5版本,然后勾选其他相关的qt内容

        5.2 module中勾选qt相关选项

        5.3 如果5.1中重新选择了qt的版本,则Ungrouped_Entries中Qt5_DIR 的路径需要自己指定,

倘若qt安装时是默认安装的,那路径一般都是装在opt下面的,所以这里笔者选择的是

        /opt/Qt5.10.1/5.10.1/gcc_64/lib/cmake/Qt5

你们如果安装了不同路径,可以对照一下我的路径做相应修改

6.search中删除qt,然后在BUILD中勾选BUILD_SHARED_LIBS,在CMAKE中选择CMAKE_BUILD_TYPE更改为Release,找到CMAKE_INSTALL_PREFIX的选项,将其中内容更改为/usr/local/vtk7.1.1,这个就是vtk的安装路径

7.下一步是再次点击Configure,如果选项中还有红色,意思是需要你确认一遍,如果无误,就再次点击Configure,直到没有红色选项后,点击Generate(生成)

8.接下来就是编译安装了

        退出cmake3-gui后,在build路径下打开终端,输入

make -j8

        -j8的意思是8个线程同时工作,如果你CPU性能好,可以试试 -j16

        编译完成后,输入

sudo make -j8 install

此时就算是大功告成了。

五、配置Qt

        由于VTK在8.0.0版本就开始QVTKQpenGLNativeWidget,而之前版本都可以用QVTKWidget,而笔者这版本是7.1.1版本的vtk,所以稍加配置就可以在qt的ui界面中看到该控件。

        此时,/usr/local/vtk7.1.1下已经安装好了,我们将/plugins/designer/下的libQVTKWidgetPlugin.so的动态库复制到/opt/Qt5.10.1/5.10.1/gcc_64/plugins/designer下

        再打开qtcreator时,已经可以在ui里看到qvtkwidget控件了

六、编写qt程序

        在ui界面中加入一个按钮和一个Qvtkwidget控件后

        

         编写代码

        widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)

#include <QWidget>
#include <vtkSmartPointer.h>
#include "vtkActor.h"
#include "vtkCamera.h"
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include <vtkNew.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <QDebug>


namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    vtkSmartPointer<vtkRenderer> renderer;//这个渲染器其实也可以放在onOpenSlot()中
    void onOpenSlot();//负责生成模型和添加渲染窗口画面
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    renderer = vtkSmartPointer<vtkRenderer>::New();

}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{
    qDebug()<<"Show Renderer Windows!!\n";
    onOpenSlot();
}

void Widget::onOpenSlot()
{
    vtkSmartPointer<vtkConeSource> cone=vtkSmartPointer<vtkConeSource>::New();//生成一个圆锥,用于展示
    cone->SetHeight(3.0);
    cone->SetRadius(1);
    cone->SetResolution(10);

    vtkSmartPointer<vtkPolyDataMapper> coneMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    coneMapper->SetInputConnection(cone->GetOutputPort());
    vtkSmartPointer<vtkActor> coneActor = vtkSmartPointer<vtkActor>::New();
    coneActor->SetMapper(coneMapper);
    renderer->AddActor(coneActor);
    vtkNew<vtkGenericOpenGLRenderWindow> renwindow;
    renwindow->AddRenderer(renderer);
    renwindow->Render();
    ui->qvtkWidget->SetRenderWindow(renwindow.Get());
    ui->qvtkWidget->update();
}

        main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

七、添加vtk动态库

        要想编译通过,首先我们就得加入动态库,这里分别介绍了两种方式,一种是qmake编译,另一种则是cmake编译。

        1、qmake编译

        每次新建一个qt工程,都会默认生成一个Pro文件,我们可以在这里引入第三方库,这样编译时就可以找到第三方库。

        这是笔者的Pro,路径仅供参考,可以模仿着写一下

#-------------------------------------------------
#
# Project created by QtCreator 2022-12-08T16:52:33
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG+=debug_and_release
CONFIG(debug,debug|release){
TARGET = vtkDemo
}else{
TARGET =vtkDemo
}
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0


SOURCES += \
        main.cpp \
        widget.cpp

HEADERS += \
        widget.h

FORMS += \
        widget.ui

INCLUDEPATH += "/usr/local/vtk7.1.1/include/vtk-7.1/"

LIBS += -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkalglib-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkChartsCore-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkCommonColor-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkCommonComputationalGeometry-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkCommonCore-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkCommonDataModel-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkCommonExecutionModel-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkCommonMath-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkCommonMisc-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkCommonSystem-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkCommonTransforms-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkDICOMParser-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkDomainsChemistry-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkDomainsChemistryOpenGL2-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkexoIIc-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkexpat-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersAMR-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersCore-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersExtraction-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersFlowPaths-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersGeneral-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersGeneric-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersGeometry-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersHybrid-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersHyperTree-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersImaging-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersModeling-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersParallel-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersParallelImaging-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersPoints-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersProgrammable-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersSelection-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersSMP-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersSources-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersStatistics-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersTexture-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkFiltersVerdict-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkfreetype-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkGeovisCore-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkgl2ps-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkglew-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkGUISupportQt-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkGUISupportQtOpenGL-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkGUISupportQtSQL-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkhdf5-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkhdf5_hl-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkImagingColor-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkImagingCore-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkImagingFourier-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkImagingGeneral-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkImagingHybrid-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkImagingMath-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkImagingMorphological-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkImagingSources-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkImagingStatistics-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkImagingStencil-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkInfovisCore-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkInfovisLayout-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkInteractionImage-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkInteractionStyle-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkInteractionWidgets-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOAMR-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOCore-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOEnSight-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOExodus-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOExport-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOGeometry-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOImage-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOImport-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOInfovis-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOLegacy-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOLSDyna-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOMINC-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOMovie-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIONetCDF-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOParallel-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOParallelXML-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOPLY-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOSQL-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOTecplotTable-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOVideo-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOXML-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkIOXMLParser-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkjpeg-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkjsoncpp-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtklibxml2-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkmetaio-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkNetCDF-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkNetCDF_cxx-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkoggtheora-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkParallelCore-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkpng-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkproj4-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingAnnotation-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingContext2D-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingContextOpenGL2-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingCore-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingFreeType-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingGL2PSOpenGL2-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingImage-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingLabel-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingLOD-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingOpenGL2-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingQt-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingVolume-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkRenderingVolumeOpenGL2-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtksqlite-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtksys-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtktiff-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkverdict-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkViewsContext2D-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkViewsCore-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkViewsInfovis-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkViewsQt-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib/ -lvtkzlib-7.1 \
        -L$$PWD/../../../../usr/local/vtk7.1.1/lib64/ -lvtktiff-7.1

DISTFILES += \
    CMakeLists.txt

        大致思路就是,动态库用LIBS+= -L$$路径 -l动态库名

        INCLUDEPATH+= “头文件路径”

        执行qmake,这样系统就可以识别到相关的库函数和头文件。

        这个时候编译是没问题,但是运行时会找不到动态库,那是因为我们还没把动态库加入到运行环境里去。

        2、编写cmake

        至于怎么编写cmake,可以参照笔者这篇文章。里面也有教怎么运行。

        CSDN

        下面是cmakelis ts.txt内容

#设置cmake版本号(视自己cmake版本为定)
cmake_minimum_required(VERSION 3.17)

#设置工程名称
project(vtkDemo)

#设置工程包含当前目录,非必须
set(CMAKE_INCLUDE_CURRENT_DIR ON)

#打开全局moc,设置自动生成moc文件,一定要设置
set(CMAKE_AUTOMOC ON)
#打开全局uic,非必须
set(CMAKE_AUTOUIC ON)
#打开全局rcc,非必须,如需打开,注意修改33行的qrc文件名
#set(CMAKE_AUTORCC ON)

#查找需要的Qt库文件,最好每一个库都要写,Qt也会根据依赖关系自动添加
find_package(Qt5Widgets)
find_package(Qt5Core)
find_package(Qt5Gui)
find_package(VTK)

include(${VTK_USE_FILE})

#查找当前文件夹中的所有源代码文件,也可以通过Set命令将所有文件设置为一个变量
FILE(GLOB SRC_FILES "./*.cpp")
#查找设置当前文件夹中所有的头文件
FILE(GLOB HEAD_FILES "./*.h")
#查找设置当前文件夹中所有的ui文件
FILE(GLOB UI_FILES "./*.ui")

#通过Ui文件生成对应的头文件,一定要添加
qt5_wrap_ui(WRAP_FILES ${UI_FILES})

#添加资源文件,非必须,一旦采用,注意修改相应的qrc文件名
#set(RCC_FILES rcc.qrc)

#将ui文件和生成文件整理在一个文件夹中,非必须
source_group("Ui" FILES ${UI_FILES} ${WRAP_FILES} )

#创建工程文件
add_executable(${PROJECT_NAME} ${SRC_FILES} ${HEAD_FILES} ${RCC_FILES} ${WRAP_FILES} ${VTK_DIR})

#添加Qt5依赖项
target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Core Qt5::Gui ${VTK_LIBRARIES})

八、在运行环境中加入动态库

        打开终端

cd /etc
sudo gedit ld.so.conf

        在ld.so.conf的最后一行添加动态库的路径 

/usr/local/vtk7.1.1/lib

/usr/local/vtk7.1.1/lib64

        倘若有的只有一个库,那就只加一个库进去,视实际情况而定

        更新配置

 sudo /sbin/ldconfig –v

         如果还是提示libxxx.so.1没有这个文件的话,就重启一下试试,照上述操作,已经是将动态库加入到运行环境了的

九、运行

        笔者这里介绍的qmake或者cmake,都可以运行起来,自由选择哦~

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

centos7 搭建vtk7.1.1+Qt开发环境+运行编译工程 的相关文章

  • STM32 汇编程序——串口输出 Hello world

    STM32 汇编程序 串口输出 Hello world 一 USART介绍二 Keil项目 xff08 一 xff09 新建项目 xff08 二 xff09 Hello s代码 xff08 三 xff09 编译生成hex文件 三 电路接法四
  • C语言笔记-头文件

    复习 xff1a 1 输出缓冲区 程序输出的数据并没有立即写入 文件 xff0c 而是先存储到输出缓冲区 xff0c 当满足一定条件时才写入文件中 xff1a 1 遇到 39 n 39 2 遇到输入语句 3 缓冲区满4k 4 程序结束 5
  • 不使用strcat()的字符串连接

    问题描述 在不使用strcat 的前提下 xff0c 实现两个字符串的连接 输入形式 以 39 39 为结束符的两行字符串 输出形式 将第一行字符串连接到第二行字符串 xff0c 然后打印输出 样例输入 abc def 样例输出 defab
  • pixhawk 整体架构的认识

    此篇blog的目的是对px4工程有一个整体认识 xff0c 对各个信号的流向有个了解 xff0c 以及控制算法采用的控制框架 PX4自动驾驶仪软件 可分为三大部分 xff1a 实时操作系统 中间件和飞行控制栈 1 NuttX实时操作系统 提
  • 光流定位原理

    无人机上光流定位通常是借助于无人机底部的一个摄像头采集图像数据 xff0c 然后采用光流算法计算两帧图像的位移 xff0c 进而实现对无人机的定位 xff0c 这种定位手段配合GPS可以在室外实现对无人机的精准控制 xff0c 并且在市内没
  • 图形化UDP发包小工具

    文章目录 前言一 构思二 用到的python模块tkiner模块tkiner模块下载 socket模块ThreadPoolExecutor模块导入方式 编码实现客户端服务端代码 三 运行结果客户端发送消息服务端 前言 工具编写用的语言是py
  • C语言之调试技巧(VS2019编译器)

    C语言之调试技巧 xff08 VS2019编译器 xff09 一 什么是调试 xff1f 调试的作用1 1 什么是调试1 2 调试的基本步骤1 3 Debug版本和Release版本的介绍二 Windows环境调试的准备2 1 调试环境的准
  • 怎么在vscode上编写C语言代码

    1 准备工作 xff1a 在vscode的拓展里面下载安装c c 43 43 官方插件 此外 xff0c 需要安装一个c c 43 43 的编译器 MinGW xff0c MinGW 官网下载地址 xff08 点击即可进入官网 xff09
  • Ubuntu20.04系统安装ROS-noetic教程及常见问题的处理

    Ubuntu版本 xff1a 20 04 ROS版本 xff1a Noetic Ninjemys 注 xff1a Ubuntu系统版本要与ROS版本相对应 xff0c 不同版本的Ubuntu系统对应了不同的ROS版本 如Ubuntu20 0
  • 笔记(STM32篇)day2——GPIO及寄存器映射

    目录 一 GPIO结构及模式 1 推挽输出 2 开漏输出 3 复用功能输出 4 上拉 下拉输入 5 复用功能输入与模拟输入 二 寄存器映射 一 GPIO结构及模式 图1 GPIO基本结构 如图1所示为GPIO基本结构 xff0c 右侧I O
  • 笔记(STM32篇)day3——寄存器结构体、端口置位函数

    目录 一些C知识点 1 define和typedef的区别 2 结构体struct 3 结构体中 和 gt 的区别 4 c文件和 h文件的关系 5 防止重复引用 一 寄存器结构体定义 1 定义结构体变量指针 2 寄存器赋值 二 端口置位函数
  • 笔记(STM32篇)day6——按键控制

    目录 一 按键硬件图 1 硬件原理 2 输入方式选择 二 功能实现 1 按键GPIO配置 2 按键扫描函数 3 LED翻转宏定义 4 主程序 参考 一 按键硬件图 1 硬件原理 按键的硬件原理图如图 xff0c 右侧接3 3V xff0c
  • 笔记(STM32篇)day8——系统时钟配置、MCO输出系统时钟

    目录 一 时钟框图 二 配置过程 1 系统时钟配置函数 2 MCO配置 参考 一 时钟框图 下图就是STM32F10x的时钟系统框图 xff0c 此处用的正点原子的图 xff0c 左侧四个蓝色的分别是 xff1a 高速内部RC时钟 xff0
  • pixhawk博客导读

    写的东西有点多 xff0c 写的也有点乱 xff0c 看题目也不知道内容是什么 xff0c 为了方便网友观看自己感兴趣的地方 xff0c 笔者把pixhawk博客归类一下 由于笔者也是边学习边写的 xff0c 难免有错误 xff0c 还请多
  • 笔记(STM32篇)day13——USART串口与PC通信实例

    USART 常用来实现控制器与电脑之间的数据传输 这使得我们调试程序非常方便 xff0c 比如我们可以把一些变量的值 函数的返回值 寄存器标志位等等通过 USART 发送到串口调试助手 xff0c 这样我们可以非常清楚程序的运行状态 xff
  • Leetcode 566. 重塑矩阵(C++矩阵容器)

    题目 输入 xff1a mat 61 1 2 3 4 r 61 1 c 61 4 输出 xff1a 1 2 3 4 思路 将原二维数组变成一维数组 xff0c 在重新放入变换后的二维数组 可以使用一维数组过渡 xff0c 也可以直接用整数除
  • 笔记(嵌入式Linux C篇)4——创建顺序存储表(二级指针方法)

    顺序存储表 概念等同于一个数组 xff0c 使用结构体定义 xff0c 成员为一个某类型的数组 xff0c 以及一个整形的last xff0c 作用是指示顺序存储表最后一个元素的下标 xff0c last默认为 1即数组为空 typedef
  • 笔记(嵌入式Linux C篇)5——单链表(有头节点)

    链表 数据元素随机存储 xff0c 通过指针表示数据之间的逻辑关系的结构就是链式存储结构 xff0c 即链表 一个链表节点包括一个数据域和一个指针域 数据域存储数据 xff0c 指针域存储下一个节点的地址 链表的结构体声明如下 xff1a
  • 实现对单链表的赋值、去重、拆分、排序。

    在一个带头结点的单链表A中 xff0c 自行输入A中的元素值 xff0c 请实现 xff1a xff08 1 xff09 将链表A中值相同的结点 xff0c 仅保留第一次出现的结点 xff1b xff08 2 xff09 将新得到的A链表
  • Linux高级编程——网络通信实现TCP(1)

    基于TCP协议的文件传输 xff08 套接字 xff09 实例 xff1a 客户端 xff1a 只用于收文件 xff1b 执行命令 xff1a 执行文件名 IP Port span class token comment 客户端 输入 执行

随机推荐

  • FPGA学习笔记—UART,RS485串口通信(verilog)

    目录 一 串口通信基础知识1 什么是串口 xff1f 2 同步通信和异步通信3 串行通信的传输方向4 常见的串口通信接口 二 UART串口通信UART基础知识1 协议层 xff1a 通信协议 xff08 包括数据格式 xff0c 传输速率等
  • 使用多线程编码实现:火车站卖票实例,四个卖票窗口随机卖出50张票

    public class Test 火车票 public static void main String args TicketWindow th1 61 new TicketWindow TicketWindow th2 61 new T
  • 【Arduino】arduino使用l298n的代码分享

    一 接线 二 使用步骤 int Left motor go 61 8 左电机前进 IN1 int Left motor back 61 9 左电机后退 IN2 int Right motor go 61 10 右电机前进 IN3 int R
  • Arduino基础与常用函数

    文章目录 1 Arduino语言2 Arduino代码结构1 类似于C的头文件包含 xff0c 变量定义等2 void setup 3 void loop 3 串口常用函数1 串口收发函数 Serial begin speed 2 读取串口
  • pixhawk px4 commander.cpp

    对于复杂的函数 xff0c 要做的就是看函数的输入是什么 来自哪里 xff0c 经过处理后得到什么 给谁用 xff0c 这样就可以把程序逻辑理清 中间的分析就是看函数如何处理的 span class hljs keyword extern
  • ESP8266 读取多个传感器数据(风速、风向、颗粒物、CO)

    文章目录 1 ESP8266开发板资源2 Arduino编程1 准备工作2 读取多个串口数据1 定义软串口 2 涉及传感器简介 3 集成代码 xff08 注释详细 xff09 4 Arduino 串口监视器 1 ESP8266开发板资源 一
  • ESP8266采集多个传感器数据通过WIFI上传到本地数据库(风速、风向、CO、颗粒物)

    文章目录 1 数据库使用简介1 Navicat premium连接2 新建数据库3 在数据库中新建表 2 代码实现代码 1 数据库使用简介 建立数据库连接 xff0c 在连接里新建数据库 xff0c 在数据库里新建表 1 Navicat p
  • STM32读取串口传感器(颗粒物传感器,被动传输)

    文章目录 1 串口2中断 xff08 在主动上传的基础上 xff09 1 添加发送字符和数组函数2 主函数调用3 串口助手接收数据 2 遇到的串口通信不成功问题 1 串口2中断 xff08 在主动上传的基础上 xff09 1 添加发送字符和
  • STM32采集问答式串口传感器数据写入SD卡(spi模式)

    文章目录 1 实验工具2 接线说明3 部分代码说明1 文件的覆盖问题1 文件系统的文件打开方式2 移动文件初始写入指针位置 2 变量的转换及写入问题1 sprintf函数2 CSV文件创建 3 数据采集流程 xff08 主函数 中断函数处理
  • (1)STM32 RC522模块测试代码

    文章目录 1 使用资源2 RC522模块2 1 RC522简介2 2 RC522工作模式 3 模块测试代码 工程文件源码链接 1 使用资源 使用32 的SPI1资源 xff1a SDA PA4 RST PA1 普通io SCK PA5 MI
  • (3)STM32 SG90舵机模块测试

    文章目录 1 资源简介2 测试源码 1 资源简介 stm32 rct6板SG90舵机模块 接线引脚 xff1a 橙色 xff1a 信号线 红色 xff1a 电源 43 5v 咖色 xff1a GND 此模块三条线固定在一起 xff0c 如果
  • (4) STM32 AS608指纹识别模块测试代码

    文章目录 1 使用资源2 实现思路简述3 指纹测试代码3 1 部分代码介绍3 2 源码链接 1 使用资源 stm32RCT6板子AS608指纹模块 软件资源 xff1a 串口二资源连接AS608 TX RX接线AS608 wak线连接PA8
  • 通过路由器连接JetsonNano与地面站

    通过路由器连接JetsonNano与地面站 一 前期准备注意事项连接局域网虚拟机网络设置 二 获取IP地址和设备名称IP地址设备名称 三 配置Nano修改bashrc文件修改hosts文件 四 配置地面站修改bashrc文件修改hosts文
  • jvm 堆 栈中存什么?

    数据类型 Java虚拟机中 xff0c 数据类型可以分为两类 xff1a 基本类型和引用类型 基本类型的变量保存原始值 xff0c 即 xff1a 他代表的 值就是数值本身 xff1b 而引用类型的变量保存引用值 引用值 代表了某个对象的引
  • YOLOv5 数据集划分及生成labels

    0 本人文件夹存放格式 xff08 因为要测试多个数据集和不同的yolov5版本和其他算法 xff0c 所以数据集整体放到外面 xff09 1 划分数据集 验证集 测试集 coding utf 8 import os import rand
  • mission planner发送数据之mavlink

    前段时间研究mp的地面站 xff0c 看了几天有点体会 xff0c 看网上的解析比较少 xff0c 写上来和大家分享下 xff0c 全是自己的理解 xff0c 东西比较少 xff0c 硬货不多 xff0c 还请见谅 最开始是想做个无人机超声
  • 实验三、嵌入式Linux网络通信实验

    实验三 嵌入式Linux网络通信实验 一 实验目的 1 掌握TCP与UDP协议原理 2 掌握套接字通信原理 2 掌握TCP套接字服务器端与客户端通信方法 二 实验基本要求 1 学习TCP与UDP协议原理 2 掌握TCP套接字服务器端与客户端
  • QT重载keyPress焦点问题

    最近项目上需要用到键盘上的快捷键 xff0c 就重载了键盘的按下事件 xff0c 以为万事大吉 实际界面上有很多控件 xff0c 导致如果鼠标点击了其中一个不能接收焦点的控件 xff0c 就不知道焦点传到了什么地方 上网查大致两种思路 xf
  • QT实现地图或图片的细节图(抓取图片的细节,放大图片)

    最近由于项目上的要求 xff0c 需要实现一个细节图 xff0c 就是一个矩形框中加载一个大图 xff0c 右下或者左下方有一个小矩形框 xff0c 可以加载全图 xff0c 并显示大矩形框中图片在全图的位置 xff0c 有点拗口 xff0
  • centos7 搭建vtk7.1.1+Qt开发环境+运行编译工程

    一 CMAKE安装 vtk必须用cmake编译 xff0c 但是 xff0c 由于高版本的cmake没有支持qt5的gui xff0c 所以选择低版本的 xff0c 但是低版本的必须得依赖于qt4 xff0c 而qt4相较于qt5 xff0