QtのCreatorはPCLライブラリで使用されます

私は前にブログを書いてポイントクラウドを使ってQtの5.9 VTK表示が、多くの部品が故障しており、レイアウトの不備が、VSを使用してのPCL PCLのインストールおよび方法の一つは、少なくとも私にこのことで、検討する価値があります方法は、VSでPCL OKをインストールするために使用されています しかし、それはいくつかの小さな問題がありますがかかりましたが、非常に致命的な吐き気、など

  • 追加あまりにも多くの追加の依存関係は、しばしばにつながる疑いVS IでPCLを使用してIntelliSense長い時間のためのカード、オートコンプリート機能は、ほとんどのプログラムの猿「自動補完の開発のための」災害に等しいであること、そして私のために費やしました
  • VSは、Qtのインターフェイスを使用したり、トラブルの多くを行う、Qtは、プラグインインタフェースデザインのQt Designerを使用してをインストールすることができますが、しかし、合計はQtの創造者自身の良いように良いとしてはまだありません
  • さらに、VSにはあまり直接Qtライブラリの使用または

そこで、原則として「人生はないだけで投げ、そこにある」の精神は、PCLは、過去にはQtにトス。

1.環境

私の環境と以前のブログは同じではありませんが、インストールと構成がほぼ同じ方法。

  • win10システム。小さな問題、違いはありません
  • VS2015での使用は、もはや2013(2013と同じではありませんVC14コンパイラ、2015年まで対応)、小さな問題ではありません
  • 32であるPCL-1.8.1-msvc2015-x86バージョンを使用して、インストールは簡単です-で、このダウンロード、コードを抽出しますutw2。をクリックしてくださいPCL-1.8.1-AllInOne-msvc2015-win32.exeのようなニーズが完了した後、インストールのブログ最初の部分のPCLのインストール手順で上記の完了、構成環境変数、プロファイルテーブル(インストールディレクトリが同じでない場合は、ここで私は、良いプロパティシートでインストールパッケージを与えている、唯一のライブラリを含むディレクトリにディレクトリを変更する必要があります)のようにあなたはVSでPCLを使用することができます
  • 私のQtのバージョンはQt5.8.0、装備していないですMINGWMSVC64ビットおよび32ビットのコンパイラパッケージを使用すると、Qtの中でPCLを使用している場合は、私がインストールされているので、それはPCL、PCLのQtのバージョンと調整する必要があります(インストールされているバージョン、 32、そしてだけにしてQtのコンパイラスイートの無力MSVC32ビット版をインストールし、Qtのインストールプロセスは少し、非常に単純な、ダウンロード、それをインストール)

2.コンパイルVTK

実際には、外部のリポジトリの場所を含むディレクトリに関する設定Qtのプロジェクトは、(に従うことができるパート3)が、サードパーティのライブラリーに関連したPCL通常の使用があります設定されますが、最後の後にVTK使用することはできませんいくつかの機能の、それがここにあります再コンパイルVTKライブラリを。

  1. VTKソースはダウンロードし
    、最初の2つのステップを私はコンパイルスキップするために使用することができ、お使いのバージョンが同じでない場合を除き、それを自分でコンパイルする必要があります。ここでPCL1.8.1はVTK8.0をサポートするとともに、送信元アドレスをダウンロードし、抽出コードを:2f5x
  2. Qtのビルド環境とソースコンパイラのCMAKE構成VTK
    2.1オープンCMAKE構成アイテム(CMAKEだけのバージョンを持つ)、次のように、ソースディレクトリとビルドディレクトリを設定:
    ここに画像を挿入説明
    2.2クリックしconfigure、VS2015generatorを選択するには、(PCL同じプラットフォームで)のWin32プラットフォームを選択してください
    ここに画像を挿入説明
    2.3引き続きconfigure
    ここに画像を挿入説明
    いくつかのパスとプロジェクトの設定2.4。プロジェクトをビルドするように設定された後、BUILD_SHARED_LIBSとVTK_GROUP_QT(Qtのためのサポート)を確認し、し続けるconfigureのQtのバージョンのconfigure qmakeのパスに求めるメッセージが表示され、設定が後に続け終えconfigureQTの、構成、インストールディレクトリとそのサブディレクトリには、パス(たとえばVS2015WIN32などもQtのプラットフォームで指定音符、私は再コンパイル、大きな金型を注ぐ、x64のためにここでQtのパスを使用)に応じてマシンを構成することができます
    我々はに示すように、OpenGLの代わりにOpenGL2のためのVTKのレンダリングバックエンドを設定するには、注意を払う必要があります一つのことがあります
ここに画像を挿入説明 ここに画像を挿入説明
ここに画像を挿入説明 ここに画像を挿入説明

ここに画像を挿入説明
2.5は持っているconfigure赤いマークが消えるまで、その後generate、選択し、このプロジェクトを開く(管理者として実行)VSを使用して、ビルドディレクトリに生成されたプロジェクトファイルVTK.slnがあるでしょうALL_BUILD-右-生成された
ここに画像を挿入説明
2.6選択の上に生成しINSTALL-右-唯一のプロジェクトのための-だけだろう、INSTALL生成するためにC:\\Program Files(x86)\\、最終的にPCLのコピーに使用されているものですVTKファイルのフォルダを生成します。
ここに画像を挿入説明
2.7ビンすべてのVTKのフォルダの上に生成されたディレクトリdllに変更ファイル名-gd.dll形式を、下のlibフォルダlibにファイル名-gd.libフォーマット、その後、VSがリリースモードの生成と実装工程、で1回以上行って使用しますVTKの下のフォルダをコピーする前に、あなたは完了です。次のVTK バッチ名前の変更は、次のPythonスクリプトを使用することができますdlllib
dlllib

import os

def rename_file(old):
    #将lib文件或dll文件改名成*-gd.lib或*-gd.dll
    if old[::-1].find('bil.')==0 or old[::-1].find('lld.')==0:
        path=os.path.dirname(old)
        f_name=os.path.basename(old)
        suf=f_name[-4:]
        f_name=f_name[:-4]
        return path+'\\'+f_name+'-gd'+suf
    else:
        return old

root='D:\\VTK'
paths=[root+'\\bin',root+'\\lib']
for p in paths:
    os.chdir(p)
    fs=os.listdir()
    fs_old=[p+'\\'+f for f in fs]
    fs_new=[rename_file(p+'\\'+f) for f in fs]
    for (f_old,f_new) in zip(fs_old,fs_new):
        os.rename(f_old,f_new)

  1. ライブラリにコンパイル配置した後、
    コンパイルされたファイルをダウンロードしたコードを抽出、:2f5x;コンパイルVTKフォルダ上のインストールディレクトリにあるPCLに3rdParty\\同じ名前のフォルダのカバーの下に(バックアップすることを忘れないでください)

3.Qtのプロジェクト構成

项目配置与VS中类似,无非是配置包含目录、添加外部库,不过VS中添加外部库分为了添加库目录与附加依赖项两部分。在Qt中添加包含目录的方式是在.pro文件中使用语句INCLUDEPATH+=包含目录;添加外部库的方式可以选中项目-右键-添加库-外部库-浏览到库文件位置(即lib文件位置),在Qt中使用PCL需要添加的库有lib目录下的库,还有3rdParty目录下各个第三方库目录下的各自的lib文件夹中的lib文件,这些文件洋洋洒洒有几百条,一个一个加入配置文件中将十分费事,可以通过以下python脚本批量一次性生成配置文件:

import re
import os

def isDebug(lib):
    return len(re.findall(r'.+debug\..+',lib))!=0 or len(re.findall(r'.+-gd-[1-9_]+\..+',lib))!=0 or len(re.findall(r'.+-gd\..+',lib))!=0 or len(re.findall(r'.+_d\..+',lib))!=0
def get_libs():
    return [os.path.abspath('.')+'\\'+f for f in os.listdir() if len(re.findall(r'.+\.lib',f))!=0]
def get_debug_release(libs):
    dbg=[d for d in libs if isDebug(d)]
    rls=[r for r in libs if not isDebug(r)]
    return dbg,rls 
def get_pairs(dbg,rls):
    d_mod=list(dbg)
    r_mod=list(rls)
    d_mod=[d.replace('_debug','') for d in d_mod]
    r_mod=[r.replace('_release','') for r in r_mod]
    d_mod=[d.replace('-gd-','-') for d in d_mod]
    d_mod=[d.replace('-gd.','.') for d in d_mod]
    d_mod=[d.replace('_d.','.') for d in d_mod]
    d_match=[dbg[i] for i in range(len(dbg)) if d_mod[i] in r_mod]
    r_match=[rls[r_mod.index(d_mod[i])] for i in range(len(d_match))]
    return d_match,r_match
    
root=os.path.abspath('.')
all_dbg=[]
all_rls=[]
paths=[root+'/lib/',root+'/3rdParty/Boost/lib/',root+'/3rdParty/FLANN/lib/',root+'/3rdParty/Qhull/lib/',root+'/3rdParty/VTK/lib/']
for p in paths:
    os.chdir(p)
    libs=get_libs()
    debug,release=get_debug_release(libs)
    all_dbg+=debug
    all_rls+=release
all_dbg+=['D:\\PCL-1.8.1\\3rdParty\\OpenNI2\\Lib\\OpenNI2.lib']
all_rls+=['D:\\PCL-1.8.1\\3rdParty\\OpenNI2\\Lib\\OpenNI2.lib']
all_dbg=[item.replace('\\','/') for item in all_dbg]
all_rls=[item.replace('\\','/') for item in all_rls]
lib_d,lib_r=get_pairs(all_dbg,all_rls)

text=''

#添加包含目录
text+=('INCLUDEPATH += '+root.replace('\\','/')+'/include/pcl-1.8\n')
text+=('INCLUDEPATH += '+root.replace('\\','/')+'/3rdParty/Boost/include/boost-1_64\n')
text+=('INCLUDEPATH += '+root.replace('\\','/')+'/3rdParty/Eigen/eigen3\n')
text+=('INCLUDEPATH += '+root.replace('\\','/')+'/3rdParty/FLANN/include\n')
text+=('INCLUDEPATH += '+root.replace('\\','/')+'/3rdParty/OpenNI2/Include\n')
text+=('INCLUDEPATH += '+root.replace('\\','/')+'/3rdParty/Qhull/include\n')
text+=('INCLUDEPATH += '+root.replace('\\','/')+'/3rdParty/VTK/include/vtk-8.0\n\n')

#添加依赖项
for (d,r) in zip(lib_d,lib_r):
    path=os.path.dirname(d)
    d_name=os.path.basename(d).replace('.lib','')
    r_name=os.path.basename(r).replace('.lib','')
    text+=('win32:CONFIG(release, debug|release): LIBS += -L'+path+'/'+' -l'+r_name+'\n')
    text+=('else:win32:CONFIG(debug, debug|release): LIBS += -L'+path+'/'+' -l'+d_name+'\n')
    text+=('else:unix: LIBS += -L'+path+'/'+' -l'+r_name+'\n')
    text+='\n'

#导出
with open(root+'/qt_config.txt','w') as f:
    f.write(text)

将以上python脚本放在PCL根目录下运行,将生成的qt_config.txt文件中的所有内容拷贝到.pro文件中即可。为避免每一次都需要配置,新建一个PCL.pri文件,将配置内容添加到其中,然后在.pro文件中include(PCL.pri)即可完成配置(类似VS中使用配置好的属性表一样)

4.测试

  • 本来想用QVTKWidget显示点云,经过测试还是失败,如果避免使用可视化方面的功能上述配置已经没有错误了,而且也可以使用简单的CloudViewer来显示点云(虽然性能渣得一匹,一个几万个点的点云只要随便转一下马上就能卡死,比起CloudCompare的加载上百万点甚至千万点可谓差的不是一星半点)如下为一个简单的测试结果:
用CloudViewer显示点云主界面被卡死(点数157541)
  • VTKのフォルダpluginの下のディレクトリQVTKWidget.dllQTクリエーターのプラグインディレクトリは本当にすることができ分権化は、一般的なプラグインの作成者とドラッグのような可能性がありますが、予期せず終了するプログラムをデバッグするために、それの時間が、唯一のリリースモードで実行することができます。異常なプロンプトが表示され、デバッグ:QWidget: Must construct a QApplication before a QWidget 程序异常结束。VTKライブラリとここに示され、OpenGLレンダリングと基礎となるVTKライブラリ、ライブラリとライブラリ、複雑さのレベルを呼び出します。諦めます
  • Qtのは、PCL立ち往生完了、最終的な分析として使用され、このライブラリは、あまりにも肥大化され、そしてあまりにも難しい再帰的にファイルを取得します
公開された28元の記事 ウォン称賛14 ビュー20000 +

おすすめ

転載: blog.csdn.net/liyunxin_c_language/article/details/100585844