Qt5.8_VTK7.0_VS2015編譯配置及測試中問題
最近在做一個基於Qt的三維點雲軟體,涉及到點雲的顯示及操作,所以要在Qt中完成QVTKWidget外掛的新增。在浮躁的心態下折騰了兩天才成功的實現Qt5.8_VTK7.0_VS2015的編譯配置及測試。
整個過程中反思和收穫並存:
反思:過程過於浮躁,查閱資料時不夠耐心!!
收穫:新的知識(VTK/CMake/快速提取某一資料夾中檔名等)
以下是整個過程中一些注意事項和測試中遇到的問題:
1.配置
整個配置過程主要參考[dedje]的文章,雖然所用的版本都不一樣,但整個過程還是相同的。只是針對下面過程進行一個詳細說明。
該過程中拷貝的QVTKWidgetPlugin.dll和QVTKWidgetPlugin.lib都位於解決方案中的相關目錄,我的是D:\Software\Qt\VTK7.0_sln\bin\Release和D:\Software\Qt\VTK7.0_sln\lib\Release。
2.測試中問題
按照[dedje]博友給出的測試程式碼,測試還是出現問題
,最終查閱資料發現是因為VS編譯的問題。所以需要在程式碼前新增原始檔。
最終測試程式碼為:
#include "vtkAutoInit.h"
// 如果編譯時編譯的是OpenGL2,則下面就改為vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkRenderingOpenGL); // VTK was built with vtkRenderingOpenGL
VTK_MODULE_INIT(vtkInteractionStyle);
#include <QtWidgets/QApplication>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkImageViewer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkJPEGReader.h>
#include <vtkRenderer.h>
#include <QVTKWidget.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QVTKWidget widget;
widget.resize(256, 256);
vtkSmartPointer<vtkSphereSource>sphereSource = vtkSmartPointer<vtkSphereSource>::New();
sphereSource->Update();
vtkSmartPointer<vtkPolyDataMapper>sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
sphereMapper->SetInputConnection(sphereSource->GetOutputPort());
vtkSmartPointer<vtkActor>sphereActor = vtkSmartPointer<vtkActor>::New();
sphereActor->SetMapper(sphereMapper);
vtkSmartPointer<vtkRenderWindow>renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkRenderer>renderer = vtkSmartPointer<vtkRenderer>::New();
renderWindow->AddRenderer(renderer);
renderer->AddActor(sphereActor);
renderer->ResetCamera();
widget.SetRenderWindow(renderWindow);
widget.show();
return a.exec();
}
但緊接著又出現以下問題:(搞死了…..)
對於該問題,只需要到相關VTK7.0的bin資料夾中將相關檔案拷貝到執行目錄中的Debug資料夾下就可以了。
最終完美實現(^o^)/
對於無法定位程式輸入點問題,參考了博友xiao_PuZi。
C++/CLI的程式,用到了OCCI連線資料庫,程式編譯沒問題,一執行就提示:無法定位程式輸入點*於動態連結庫oraocci12.dll上。
這個時候,需要先確定你的DLL檔案已經放到正確的資料夾下,正確的檔案位置是:C:\WINDOWS\system32。也有人說64位系統,需要放到C:\WINDOWS\SysWOW64路徑下,實測並不需要。
上面的方法不行的話,可以試下:
①、將出問題的dll檔案放到程式的Debug或Release資料夾下;
②、將要用的dll檔案所在的路徑,新增的系統的Path環境變數中。
小知識點:
怎樣快速提取資料夾中所有檔案的名字:
為什麼會突然講到這個小技能,因為發現像VTK這種庫在新增依賴項時是一件非常頭疼的事情(其依賴項達到上百個),如果一個個輸入是非常耗時間的。
- 找到VTK依賴項資料夾
2.在該資料夾下新建一個TXT文件
如:快速提取檔名.txt,並在該文件中新增一些內容:
(注意空格)
3.將文件字尾名改為“.bat”,確認後直接執行,就會在資料夾中生成了LIST.TXT文件
可能會生成一些無關檔案,只需把相關檔名刪除即可。
注:中等笨辦法,如果有博友有更好的方法,希望可以分享下。