PCL+QT+VTK完整开发环境搭建以及开发- QT安装

12 篇文章 2 订阅
11 篇文章 0 订阅

背景

ubuntu 16.04通过ros-kinetic-desktop-full安装的PCL库开发有很多bug,所以改用稳定的QT5.7+VTK8.1+PCL1.8.1的组合。

总览

  • qt: 5.7.0
  • qmake: 3.0 based on Qt 5.7.0
  • qtcreator: 3.5.1 based on Qt 5.5.1

清除已有的QT

sudo apt-get purge qt5-default qtcreator 
sudo apt-get purge qt4-designer qt4-dev-tools

安装qt57

首先:安装图形化的QT应用需要OpenGL库文件以及头文件,在Ubuntu和其他Debian系列的linux系统上可以通过安装libgl1-mesa-devbuild-essential 来满足其最小化需求。

sudo apt-get install build-essential libgl1-mesa-dev

Download qt and install.

sudo apt-get install build-essential libgl1-mesa-dev
wget http://download.qt.io/official_releases/qt/5.7/5.7.0/qt-opensource-linux-x64-5.7.0.run
chmod +x qt-opensource-linux-x64-5.7.0.run
./qt-opensource-linux-x64-5.7.0.run

install to /opt/Qt5.7.0

创建链接  /opt/qt/

cd /opt
sudo ln -s /opt/Qt5.7.0 qt

qtchooser

添加 qt57.conf

cat /usr/share/qtchooser/qt57.conf 

/opt/qt/5.7/gcc_64/bin
/opt/qt/5.7/gcc_64/lib

# link to qt57
cd /usr/lib/x86_64-linux-gnu/qtchooser
sudo ln -s /usr/share/qtchooser/qt57.conf qt57.conf

链接到默认

cd /usr/lib/x86_64-linux-gnu/qt-default/qtchooser

sudo rm default.conf
sudo ln -s /usr/share/qtchooser/qt57.conf default.conf
ls -l default.conf
default.conf -> /usr/share/qtchooser/qt57.conf

qt conf

/usr/share/qtchooser/

  • qt4-x86_64-linux-gnu.conf (FILE)
  • qt5-x86_64-linux-gnu.conf (FILE)
  • qt57.conf (FILE)

/usr/lib/x86_64-linux-gnu/qtchooser/

  • 4.conf (link)
  • 5.conf (link)
  • qt4.conf (link)
  • qt5.conf (link)
  • qt57.conf (link)

/usr/lib/x86_64-linux-gnu/qt-default/qtchooser/

  • default.conf (link) qt57.conf

qtchooser

which qtchooser 
/usr/bin/qtchooser

qtchooser -l

4
5
default
qt4-x86_64-linux-gnu
qt4
qt5-x86_64-linux-gnu
qt5

qtchooser env

qtchooser -print-env
QT_SELECT="default"
QTTOOLDIR="/opt/qt/5.7/gcc_64/bin"
QTLIBDIR="/opt/qt/5.7/gcc_64/lib"

export QT_QPA_PLATFORM_PLUGIN_PATH

vim .bashrc
export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/qt/5.7/gcc_64/plugins/platforms

如果不添加会报错: 

Failed to load platform plugin "xcb".

QtCreator Tutorial

安装 qtcreator

sudo apt-get -y install qtcreator

qtcreator -version
Qt Creator 3.5.1 based on Qt 5.5.1

创建应用

  1. 启动qtcreator以及创建Qt Widget Application 
  2. 添加资源文件resource.qrc.

     hello-->right click--> Add New... --->qt---> qt resource file---> name resource---> generate resource.qrc
    
  3. 然后导入image到 resource.qrc

     Resources | resource.qrt--->right click---> Add Prefix...---> name /prefix
     Resources | resource.qrt | /prefix--->right click ---> Add Existing Files... ---> choose images ---> OK
    
  4. use resource in mainwindow.ui

     button ---> property page ---> icon ---> Choose Resource... ---> select image ---> OK 
    

qt slots

方法 1

steps:

mainwindow.ui ---> choose button ---> right click ---> Go to slot... ---> choose clicked() ---> OK

自动添加slots in mainwindow.h 

private slots:
    void on_pushButtonOK_clicked();

in mainwindow.cpp

void MainWindow::on_pushButtonOK_clicked()
{

}

Tips: if we use on_pushButtonOK_clicked style, there is no need to connect with slots in MainWindow constructor by hand.

方法 2 (OK)

手动添加 slots in mainwindow.h 

private slots:
    void pushButtonCancel_clicked();

and in mainwindow.cpp

void MainWindow::pushButtonCancel_clicked()
{

}

connect button with slot in mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // connect
    connect(ui->pushButtonCancel, SIGNAL(clicked()), this, SLOT(pushButtonCancel_clicked()));
}

Code Example

folder

文件夹结构如下:

$ tree hello/

hello/
├── CMakeLists.txt
├── hello.pro
├── hello.pro.user
├── images
│   ├── kezunlin_logo.png
│   ├── logo.svg
│   └── searchicon.png
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
├── mainwindow.ui
└── resource.qrc

1 directory, 11 files

code

mainwinow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_pushButtonOK_clicked(); // method1
    void pushButtonCancel_clicked(); // method2

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMessageBox>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // connect
    connect(ui->pushButtonCancel, SIGNAL(clicked()), this, SLOT(pushButtonCancel_clicked()));
}

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

void MainWindow::on_pushButtonOK_clicked()
{
    QString text = ui->lineEditName->text();
    QMessageBox::information(this, "OK", text);
    ui->pushButtonOK->setText( tr("(OK. click me)") );
}

void MainWindow::pushButtonCancel_clicked()
{
    QString text = ui->lineEditName->text();
    QMessageBox::information(this, "Cancel", text);
    ui->pushButtonCancel->setText( tr("(Cancel.click me)") );
}

main.cpp

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

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

    return a.exec();
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.8)

project(helloworld)

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)

# ${QT_INCLUDE_DIRS} ${QT_LIBRARIES} and so on are all Qt4 Macro Definitions!!!!!
# Find the QtWidgets library
find_package(Qt5Core)
find_package(Qt5Widgets)
find_package(Qt5Gui)
find_package(Qt5OpenGL)
find_package(Qt5Xml)

#message( [qt] ${Qt5Core_INCLUDE_DIRS} )
#message( [qt] ${Qt5Core_LIBRARIES} )
#message( [qt] ${Qt5Widgets_INCLUDE_DIRS} )
#message( [qt] ${Qt5Widgets_LIBRARIES} )

# cpp files
aux_source_directory(. SRC_LIST)

# ui files
qt5_wrap_ui(ui_FILES mainwindow.ui)
# resource files
qt5_add_resources(qrc_FILES resource.qrc)

message( [Main] ${SRC_LIST} ) # ./main.cpp./mainwindow.cpp
message( [Main] ${ui_FILES} ) # build/ui_mainwindow.h
message( [Main] ${qrc_FILES} )# build/qrc_resource.cpp

# Tell CMake to create the helloworld executable
add_executable(${PROJECT_NAME} ${SRC_LIST} ${ui_FILES} ${qrc_FILES})

qt5_use_modules(${PROJECT_NAME} Core Widgets OpenGL Xml Gui)

# Use the Widgets module from Qt 5.
#qt5_use_modules(helloworld Widgets)

# link other libraries
#target_link_libraries (${PROJECT_NAME} ${SPEC_OPENCV_LIBS})

CMakeLists.txt 2

cmake_minimum_required(VERSION 3.0)

set(PROJECT_NAME demo)

set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)  # bin/

set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})

set(CMAKE_CXX_STANDARD 11)
#set(CMAKE_PREFIX_PATH ${QTDIR})
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

# QT5_DIR /opt/Qt5.7.0/5.7/gcc_64/lib/cmake/Qt5
find_package(Qt5 REQUIRED Widgets Core Gui Network OpenGL)
find_package(OpenCV REQUIRED COMPONENTS core highgui imgproc features2d calib3d )
find_package(Protobuf REQUIRED) # 3.6.1
find_package(VTK REQUIRED) # 8.1.2
include(${VTK_USE_FILE})

MESSAGE( [Main] " VTK_INCLUDE_DIRS = ${VTK_INCLUDE_DIRS}")
MESSAGE( [Main] " VTK_LIBRARIES = ${VTK_LIBRARIES}")

find_package(PCL REQUIRED) # 1.9.1
#find_package(PCL REQUIRED COMPONENTS common io filters visualization)

link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

message ([main] "PCL_DIR = ${PCL_DIR}")
message ([main] "PCL_FOUND = ${PCL_FOUND}")
message ([main] "PCL_INCLUDE_DIRS = ${PCL_INCLUDE_DIRS}")
message ([main] "PCL_LIBRARIES = ${PCL_LIBRARIES}")

message ([main] "PCL_LIBRARY_DIRS = ${PCL_LIBRARY_DIRS}")
message ([main] "PCL_COMMON_LIBRARIES = ${PCL_COMMON_LIBRARIES}")
message ([main] "PCL_IO_LIBRARIES = ${PCL_IO_LIBRARIES}")
message ([main] "PCL_FILTERS_LIBRARIES = ${PCL_FILTERS_LIBRARIES}")
message ([main] "PCL_VISUALIZATION_LIBRARIES = ${PCL_VISUALIZATION_LIBRARIES}")

include_directories(
    ./ # current folder

#    ${GFLAGS_INCLUDE_DIRS}
#    ${GLOG_INCLUDE_DIRS}
#    ${GTEST_INCLUDE_DIRS}
    ${PROTOBUF_INCLUDE_DIRS}
    ${Boost_INCLUDE_DIRS} 
    ${OpenCV_INCLUDE_DIRS}
    ${VTK_INCLUDE_DIRS}
    ${PCL_INCLUDE_DIRS}
) 

set(SOURCE_FILES
    main.cpp
    MainWindow.cpp
    ./proto/camera_image.pb.cc
    ./proto/point_cloud.pb.cc
)

set(RESOURCE_FILE resource.qrc)

add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${RESOURCE_FILE})

target_link_libraries(${PROJECT_NAME} 
    Qt5::Widgets Qt5::Gui Qt5::Core Qt5::OpenGL Qt5::Network
    ${Boost_LIBRARIES}
    ${PROTOBUF_LIBRARIES}
    ${OpenCV_LIBRARIES}
    ${VTK_LIBRARIES}
    ${PCL_LIBRARIES}    
    pthread
    rt
)

cmake

cd hello
mkdir build
cd build
cmake ..
make

run

./helloworld

screen snapshot like this:

 

qt demo window

qt demo window

Reference

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建点云开发环境需要安装以下软件: 1. Visual Studio 2017:用于编写C++代码。 2. Qt 5.10.1:用于构建GUI界面。 3. PCL 1.8.1:点云库。 4. VTK 8.0:用于可视化点云数据。 以下是具体的步骤: 1. 安装 Visual Studio 2017,选择 C++ 工作负载。此外,还需要安装 CMake。 2. 下载 Qt 5.10.1 安装包并安装需要安装的组件有:Qt 5.10.1 MSVC2017 64-bit、Qt Visual Studio Tools、Qt Charts 和 Qt Data Visualization。 3. 下载 PCL 1.8.1 for Windows,并解压到一个目录下。 4. 下载 VTK 8.0 for Windows,并解压到一个目录下。 5. 打开 CMake,设置源代码路径为 PCL 的根目录,设置构建路径为一个新的目录(例如:PCL_build)。点击 Configure,选择 Visual Studio 15 2017 Win64 作为生成器,点击 Finish。 6. 在 CMake ,找到 VTK_DIR 设置项,将其设置为 VTK安装目录(例如:D:/VTK-8.0.0/build)。点击 Configure,然后点击 Generate。 7. 打开 Visual Studio 2017,选择 File > New > Project,选择 Qt Widgets Application。设置项目名称、位置和解决方案名称,然后点击 Create。 8. 在项目属性,选择 C/C++ > General,将 Additional Include Directories 设置为 PCL 的 include 目录(例如:D:/PCL-1.8.1/include/pcl-1.8)和 VTK 的 include 目录(例如:D:/VTK-8.0.0/include/vtk-8.0)。 9. 在项目属性,选择 Linker > General,将 Additional Library Directories 设置为 PCL 的 lib 目录(例如:D:/PCL-1.8.1/lib)和 VTK 的 lib 目录(例如:D:/VTK-8.0.0/build/bin/Release)。 10. 在项目属性,选择 Linker > Input,将 Additional Dependencies 设置为以下库:pcl_common_release.lib、pcl_io_ply_release.lib、pcl_visualization_release.lib、vtkCommonCore-8.0.lib、vtkFiltersCore-8.0.lib、vtkInteractionStyle-8.0.lib、vtkRenderingCore-8.0.lib。 11. 编写代码并构建项目,即可开始点云开发。 以上是在 Windows 10、Visual Studio 2017、Qt 5.10.1、PCL 1.8.1 和 VTK 8.0 环境下的点云开发环境搭建步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值