




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、qt和vtk共用作者:我是小李,歡迎交流 來源:博客園 發(fā)布時間:2009-02-10 11:00 閱讀:908 次 原文鏈接 收藏 QT與VTK的結合開發(fā)2008/07/16 15:26最近,由于項目的需要,我打算使用VTK來開發(fā)程序,VTK全名是VisualizationToolKit,它是一套跨平臺的C庫,對 OpenGL作了較全面的封裝,將各種三維模型的存儲,運算,顯示,交互等內容全都以類的方式封裝起來了,并且提供比OpenGL強大得多的功
2、能。可惜 VTK最大的缺點是,沒有免費的教程,它只提供免費的API手冊,其中只是對各個類的功能羅列而已,而參考書籍則需要花幾十美元去購買,所以學習VTK只 能依靠它的大量Example了。由于我的項目需要兼故未來跨平臺的可能(目前只在Windows下),所以必須使用一套跨平臺的開發(fā)庫, 在VTKExamplesGUI的例子里,Windows平臺下只有SDK,MFC,C+ Builder這幾個例子,另外還有Motif,Python,Tcl,選擇是不少,但是Motif聽說編程比較麻煩,我也從來沒有接觸過,Tcl和 Python作為腳本語言,其性能和安全性則有些令人擔憂,也就是說,這里面沒有一個是我
3、能使用的。說起跨平臺,由于單位里項目的關系,我接觸得比較 多的就是QT了,所以,在未選定VTK之前,其實我是打算使用QTOpenGL的組合方式來開發(fā)這個軟件的,其實,如果不考慮跨平臺,我還是會選擇 QT,因為它的事件處理方式對于用慣Delphi的我而言,更為順手,那么現(xiàn)在使用了VTK,是否還能將VTK和QT組合起來使用呢。作為試驗,我仿照VTKExamplesGUIWin32SampleMFC,制作了以下這個小程序,很順利,結果證明了我的猜想,QT和VTK是可以很方便的結合起來的,下面就跟我來一步步制作這個程序吧:1)從下 載VTK的最新版本,我用的是4.2。該包中只有程序文件,你還需要自己編
4、譯,為此你還需要CMake,用來生成VC的.dsw,.dsp文件。然后用 VC打開生成的工程文件,并進行編譯。最后將編譯后生成的目錄:VTKbinDebug加入到Windows系統(tǒng)環(huán)境的Path中。2)下載QT,我目前使用的是QT334,打開VC的Tools->Options->Directories,將QT的bin,include,lib路徑分別加入其中。3)在VC中,建立一個新的Win32 Console Application工程,建立一個main.cpp,作為main函數(shù)的入口,代碼如下:#include <qapplication.h>#include &qu
5、ot;testwindow.h"int main(int argc, char* argv)QApplication app(argc, argv);TestWindow testwin;testwin.show();app.connect(&app, SIGNAL(lastWindowClosed(), &app, SLOT(quit();return app.exec();其中的testwindow.h,是程序的主窗口TestWindow的頭文件,一會將會建立該文件。這段程序所做的是,初始化QApplication,并將TestWindow顯示出來,并進入主程序的
6、消息循環(huán)app.exec()。下面實現(xiàn)TestWindow類,分別建立testwindow.h和testwindow.cpptestwindow.h:#include <qmainwindow.h>class TestWindow: public QMainWindowQ_OBJECTpublic:TestWindow();TestWindow();testwindow.cpp:#include "testwindow.h"#include "moc_testwindow.h"TestWindow:TestWindow()TestWindow
7、:TestWindow()你 是否注意到了testwindow.cpp中的#include "moc_testwindow.h"一行,這個moc_testwindow.h將會建立TestWindow的RTTI信息,并且綁定消息等,它并不 需要我們自己實現(xiàn),而是由qt的一個名為moc的程序建立,在VC的FileView中,右鍵點擊testwindow.h,并選擇Settings,然 后在打開的Project Settings對話框中選擇Custom Build頁,在Commands中填入:moc -i testwindow.h -o moc_testwindow.h意思是調用
8、moc程序,根據(jù)testwindow.h的內容,自動生成一個名為moc_testwindow.h的moc文件。在Outputs中填入:moc_testwindow.h然后,在Project Settings中選中projct,在Link頁的Object/library modules中加入:qt-mt334.lib。編譯程序,如果順利,一個簡單的QT程序就寫好了,它會在啟動后顯示一個空白的窗口。3)加入VTK的代碼,這些代碼都可以參考ExamplesGUIWin32SampleMFC程序,將testwindow.h改造成如下:#include <qmainwindow.h>#inc
9、lude "vtkRenderer.h"#include "vtkWin32OpenGLRenderWindow.h"#include "vtkWin32RenderWindowInteractor.h"class TestWindow: public QMainWindowQ_OBJECTpublic:TestWindow();TestWindow();protected:virtual void paintEvent(QPaintEvent *);virtual bool winEvent(MSG *);private:vtkRe
10、nderer *Renderer;vtkWin32OpenGLRenderWindow *RenderWindow;vtkWin32RenderWindowInteractor *Interactor;testwindow.cpp改造成如下:#include "testwindow.h"#include "moc_testwindow.h"#include "vtkActor2D.h"#include "vtkTextMapper.h"#include "vtkTextProperty.h"#i
11、nclude "vtkDataSetReader.h"#include "vtkDataSetMapper.h"#include "vtkCommand.h"#include "vtkCamera.h"#include "vtkWin32RenderWindowInteractor.h"#include "vtkInteractorStyleTrackballCamera.h"TestWindow:TestWindow()this->Renderer = vtkRend
12、erer:New();this->Renderer->SetBackground(0.3, 0.5, 0.1);this->RenderWindow = vtkWin32OpenGLRenderWindow:New();this->RenderWindow->AddRenderer(this->Renderer);this->Interactor = vtkWin32RenderWindowInteractor:New();vtkActor2D *actor2d = vtkActor2D:New();vtkTextMapper *txt = vtkTe
13、xtMapper:New();actor2d->SetMapper(txt);txt->SetInput("Hello World");txt->GetTextProperty()->SetFontSize(24);this->Renderer->AddProp(actor2d);txt->Delete();actor2d->Delete();vtkActor *actor = vtkActor:New();vtkDataSetReader *reader = vtkDataSetReader:New();reader->
14、;SetFileName("weldedSpheres.vtk");vtkDataSetMapper *mapper = vtkDataSetMapper:New();mapper->SetInput(reader->GetOutput();actor->SetMapper(mapper);this->Renderer->AddProp(actor);mapper->Delete();reader->Delete();actor->Delete();TestWindow:TestWindow()if (this->Int
15、eractor) this->Interactor->Delete();if (this->Renderer) this->Renderer->SetRenderWindow(NULL);if (this->RenderWindow) this->RenderWindow->Delete();if (this->Renderer) this->Renderer->Delete();void TestWindow:paintEv
16、ent(QPaintEvent *e)if (! this->Interactor->GetInitialized() this->RenderWindow->SetWindowId(this->winId(); this->RenderWindow->WindowInitialize(); this->Interactor->SetRenderWindow(this->RenderWindow); this->Interactor
17、->Initialize();this->RenderWindow->Render();bool TestWindow:winEvent(MSG *msg)switch (msg->message) case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_RBUTTONDOWN: case WM_R
18、BUTTONUP: case WM_MOUSEMOVE: case WM_CHAR: case WM_TIMER: if (this->Interactor->GetInitialized() vtkHandleMessage2(msg->hwnd, msg->message, msg->lParam, msg->wParam, this->Interactor);
19、60; return false;其中用到了一個模型文件weldedSpheres.vtk,可以在VTK中找到??赡苣阈枰薷乃穆窂?。然后,再次打開Proect Settings對話框,在C/C+頁中,選擇Category:Preprocessor,在Additional include directories:中加入:D:VTK,D:VTKParallel,D:VTKHybrid,D:VTKPatented,D:VTKRendering,D:VTKIO,D:VTKImaging,D:VTKGraphics,D:VTKFiltering,D:VTKCommon選擇Link頁,選擇Catego
20、ry:Input,在Object/library modules:中加入:vtkRendering.lib vtkGraphics.lib vtkImaging.lib vtkIO.lib vtkFiltering.lib vtkCommon.lib vtkftgl.lib glu32.lib opengl32.lib glu32.lib opengl32.lib vtkfreetype.lib vtkpng.lib vtktiff.lib vtkzlib.lib vtkjpeg.lib vtkexpat.lib 在Addtional library path中加入:D:VTKbindebug
21、以上都假設VTK安裝在D盤下,如果你安裝在其它目錄,請修改以上的路徑。好了,重新編譯程序,運行,你將看到如下所示的VTK界面。Tuesday, October 17th 2006, 6:13pmTutorial for using Qt with VTKHi,I am a newbie in VTK and Qt. For some time now,I have been trying to use VTK with Qt but faced a lot of problems getting started and configuring them. In the end, it work
22、ed(thanks to Anja Ende,Clinton Stimpson and everyone who helped me get started). I am writing down the procedure to get VTK to work with Qt in visual studio 2005 environment. Hopefully this document will help other newbies save a lot of time.I have tested the following procedure with MS Visual Studi
23、o 2005 Professional on Windows XP Pro X64.1). Install and get Qt working as per the instructions here: This works fine and you can start using Qt with visual studio(for those who just want to use Qt with Visual Studio, this is how we do it!)2). Install and configure VTK using Cmake with (a) VTK_USE_
24、GUISUPPORT option and (b) VTK_USE_QVTK option, set to 'ON'If Qt is installed after VTK, you will need to reconfigure VTK to find Qt.3).Now it's time to test the configuration with a code which uses both Qt and VTK. You can try it with the example in VTK source( ./Examples/GUI/Qt/Imagevie
25、wer). Copy this code(only the cxx file) to a new directory.4) I use 'qmake' to generate build files. The method to build this example using qmake is:(a) open visual studio command prompt, go to the directory containing the cxx file and type: qmake -projectthis makes a '.pro' file. Op
26、en this file in an editor and modify it as below-# Automatically generated by qmake (2.00a) Wed Oct 11 17:14:01 2006#TEMPLATE = vcapp # this was originally 'app' modify it to 'vcapp'TARGET +=DEPENDPATH += .INCLUDEPATH += . # here include the path to all the directories containing the
27、 header filesLIBS += # add this line and include all the libraries(Qt and VTK) needed for the application# InputSOURCES += main.cxx-(b)Save the .pro file and run qmake from the command prompt again. This will generate a '.vcproj' file. Open this file in visual studio and build it there. If y
28、ou included all the libraries and include paths, this should build and run perfectly.I used qmake for building, because I didn't know how to do it with Cmake. But if the experts here can throw light on that it would help many. Also if someone knows of any other way(probably easier and smarter) t
29、o use Qt with VTK, please add to this document.Thanks,Ashish · Go to the top of the page · Quote Skip user informationalexiuk BeginnerPosts: 2··2 Thursday, May 10th 2007, 6:04pmRE: Tutorial for using Qt with VTKHi Ashish,Thanks for posting those details. I am trying to follow tho
30、se instructions and am running into problems building QVTK. Error messages follow. Did you have any trouble building VTK?Thanks,Mark1>- Build started: Project: QVTK, Configuration: Debug Win32 -1>Generating moc_vtkEventQtSlotConnect.cxx1>Generating moc_QVTKWidget.cxx1>Compiling.1>moc_
31、vtkEventQtSlotConnect.cxx1>c1xx : fatal error C1083: Cannot open source file: '.moc_vtkEventQtSlotConnect.cxx': No such file or directory1>moc_QVTKWidget.cxx1>c1xx : fatal error C1083: Cannot open source file: '.moc_QVTKWidget.cxx': No such file or directory1>Generating C
32、ode.1>Build log was saved at "file:/c:VTKvcc_buildGUISupportQtQVTK.dirDebugBuildLog.htm"1>QVTK - 2 error(s), 0 warning(s)VTK Build summary:= Build: 1 succeeded, 3 failed, 47 up-to-date, 6 skipped · Go to the top of the page · Quote Skip user informationAshish Beginner·
33、Posts: 8··3 Thursday, May 10th 2007, 8:30pmRE: Tutorial for using Qt with VTKHi Mark,I didn't face any problems building QVTK. Also I have stopped using 'qmake' and use 'cmake' these days.Can you give me more details as to what you have done so far and at what step are
34、you getting the errors? Are you able to test run a simple Qt code?Thanks,Ashish · Go to the top of the page · Quote Skip user informationfrenchmikey BeginnerPosts: 1··4 Monday, February 16th 2009, 8:41amVTK with QTcreatorHi Ashish,I installed VTK and successfully built all the ex
35、amples ( specially the GUI/Qt). everything is working fine when compiled with CMAKEnow l try to compile the same examples with Qtcreator and his qmake funtion. doesn't workI updated my .pro with the includepath and library . but doesn't work.do you have a simple .pro so l can check if l don&
36、#39;t miss anything ? also l'm using mingwin .thanksMichaelmy .pro:CONFIG+= DEBUG TEMPLATE = appTARGET = VTK_testDEPENDPATH += .INCLUDEPATH +=C:VTKbin C:VTKincludevtk-5.2LIBS +=# InputSOURCES += main.cxxCompile messages:Starting: C:/Qt/QtCreator/mingw/bin/mingw32-make.exe debug -w mingw32-make:
37、Entering directory C:/Documents and Settings/Michael/Desktop/Project/Qt_creator/vtk'C:/Qt/QtCreator/mingw/bin/mingw32-make -f Makefile.Debugmingw32-make1: Entering directory C:/Documents and Settings/Michael/Desktop/Project/Qt_creator/vtk'g+ -c -g -frtti -fexceptions -mthreads -Wall -DUNICOD
38、E -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:QtQtCreatorqtincludeQtCore" -I"c:QtQtCreatorqtincludeQtCore" -I"c:QtQtCreatorqtincludeQtGui" -I"c:QtQtCreatorqtincludeQtGui" -I"c:QtQtCreatorqtinclude&q
39、uot; -I"c:VTKbin" -I"c:VTKincludevtk-5.2" -I"c:QtQtCreatorqtincludeActiveQt" -I"debug" -I"." -I"c:QtQtCreatorqtmkspecswin32-g+" -o debugmain.o main.cxxmingw32-make1: Leaving directory C:/Documents and Settings/Michael/Desktop/Project/Qt_cre
40、ator/vtk'mingw32-make: Leaving directory C:/Documents and Settings/Michael/Desktop/Project/Qt_creator/vtk'This application has requested the Runtime to terminate it in an unusual way.Please contact the application's support team for more information.mingw32-make1: * debug/main.o Error 3m
41、ingw32-make: * debug Error 2Exited with code 2.Error while building project vtkWhen executing build step 'Make' · Go to the top of the page · Quote Skip user informationxzh_biti BeginnerPosts: 1··5 Wednesday, March 11th 2009, 1:46amhello ,everyonehello, everyone, i am a f
42、oreigner, and i am poor in English, so forgive me my English.So i want to ask Michael , have your solved your problem with qtcreator to compile VTK, if you have, could you tell me how to write .pro , and do you have some vtk electrical books ? In my country, so few information about vtk, and please
43、send me some of them , thank you very much! And my email is : · Go to the top of the page · Quote Skip user informationjustadreamer BeginnerPosts: 2··6 Friday, April 24th 2009, 10:13pmQtCreator + QT + VTK in LinuxHi, just wanted to share my experience on a jump start with using Q
44、t+VTK.As I don't have experience with using Qt I decided to go the easiest possible way - downloaded Qt4 and the QtCreator. The steps I took next:1. Built Qt4 from source and installed it.2. Added /usr/local/Trolltech to my PATH environment variable3. Downloaded the source for VTK 5.44. Launched
45、 ccmake in the root of the source tree. 5. Switched ON VTK_USE_GUISUPPORT VTK_USE_QVTK.6. Pressed "c" to configure in ccmake, and specified the version of Qt 4.0. 7. After configuring in ccmake, launched cmake, and then make and make install.8. The needed QVTKWidget.h will be in the /usr/b
46、in/local/include/vtk-5.4.9. Now we launch QtCreator and create the simple application.10. In the mainwindow.h I add these headers:Source code123#include <QVTKWidget.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h>And these members:Source code12QVTKWidget* vtkWidget; vtkRend
47、erer* ren;11. In the mainwindow.cpp I added this code in the constructor:Source code12345678910MainWindow:MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui:MainWindowClass) ui->setupUi(this); vtkWidget = new QVTKWidget(this,QFlag(0); ui->verticalLayout->addWidget(vtkWidget); ui-&
48、gt;verticalLayout->update(); ren = vtkRenderer:New(); vtkWidget->GetRenderWindow()->AddRenderer(ren); ren->SetBackground(1.0,0,0); ren->Render(); And destructor:Source code1234MainWindow:MainWindow() ren->Delete(); delete vtkWidget; delete ui; As you see above I have added a vertic
49、alLayout to my form - it has some more controls, and the widget I am adding goes to the bottom. 12. In the .pro file I added these:Source code123 LIBS += -L/usr/local/lib/vtk-5.4 -lvtkCommon -lvtksys -lQVTK -lvtkQtChart -lvtkViews -lvtkWidgets -lvtkInfovis -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtklibxml2 -lvtkDICOMParser -lvtkpng -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkalglib -lvtkexpat -lvtkverdict -lvtkmetaio -lvtkNetCDF -lvtksqlite -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid INCLUDEPATH += /usr/local/include/vtk-5.413.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 六一慈善活動策劃方案
- 六一漢唐活動方案
- 六一活動健美操活動方案
- 六一活動合唱活動方案
- 六一班活動優(yōu)惠活動方案
- 六一納新活動方案
- 六一節(jié)教學活動方案
- 六一蛋糕店活動策劃方案
- 六十校慶活動策劃方案
- 六年級班會課活動方案
- 預拌混凝土及原材料檢測理論考試題庫(含答案)
- 3~6歲兒童早期運動游戲干預課程設計研究-基于SKIP的研究證據(jù)
- 《植物生理學》課件第三章+植物的光合作用
- 游泳館網架翻新施工組織方案設計
- 3.1 定格青春——向藝術家學創(chuàng)作 課件-2021-2022學年高中美術人美版(2019)選修繪畫
- 有機化學所有的命名--超全.
- 引水罐的設計計算
- 三年級譯林版英語下學期按要求寫句子專項強化練習題
- 電纜接線工藝設計規(guī)范流程
- 中醫(yī)經絡減肥課件
- 5WHY分析法培訓
評論
0/150
提交評論