QT与VTK的结合开发(转载)
(2012-12-17 21:30:31)
标签:
vtkqtit |
分类: 计算机 |
#include
#include "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:
#include
class TestWindow: public QMainWindow
{
Q_OBJECT
public:
TestWindow();
~TestWindow();
};
testwindow.cpp:
#include "testwindow.h"
#include "moc_testwindow.h"
TestWindow::TestWindow()
{
}
TestWindow::~TestWindow()
{
}
moc -i testwindow.h -o moc_testwindow.h
意思是调用moc程序,根据testwindow.h的内容,自动生成一个名为moc_testwindow.h的moc文件。
在Outputs中填入:
moc_testwindow.h
#include
#include "vtkRenderer.h"
#include "vtkWin32OpenGLRenderWind
#include "vtkWin32RenderWindowInte
class TestWindow: public QMainWindow
{
Q_OBJECT
public:
TestWindow();
~TestWindow();
protected:
virtual void paintEvent(QPaintEvent *);
virtual bool winEvent(MSG *);
private:
vtkRenderer *Renderer;
vtkWin32OpenGLRenderWind
vtkWin32RenderWindowInte
};
#include "testwindow.h"
#include "moc_testwindow.h"
#include "vtkActor2D.h"
#include "vtkTextMapper.h"
#include "vtkTextProperty.h"
#include "vtkDataSetReader.h"
#include "vtkDataSetMapper.h"
#include "vtkCommand.h"
#include "vtkCamera.h"
#include "vtkWin32RenderWindowInte
#include "vtkInteractorStyleTrackb
TestWindow::TestWindow()
{
this->Renderer = vtkRenderer::New();
this->Renderer->SetBackground(0.3, 0.5, 0.1);
this->RenderWindow = vtkWin32OpenGLRenderWind
this->RenderWindow->AddRenderer(this->Renderer);
this->Interactor =
vtkWin32RenderWindowInte
vtkActor2D *actor2d =
vtkActor2D::New();
vtkTextMapper *txt = vtkTextMapper::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->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->Interactor) {
this->Interactor->Delete();
}
if (this->Renderer) {
this->Renderer->SetRenderWindow(NULL);
}
if (this->RenderWindow) {
this->RenderWindow->Delete();
}
if (this->Renderer) {
this->Renderer->Delete();
}
}
void TestWindow::paintEvent(QPaintEvent
*e)
{
if (! this->Interactor->GetInitialized()) {
this->RenderWindow->SetWindowId(this->winId());
this->RenderWindow->WindowInitialize();
this->Interactor->SetRenderWindow(this->RenderWindow);
this->Interactor->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_RBUTTONUP:
case WM_MOUSEMOVE:
case WM_CHAR:
case WM_TIMER:
if (this->Interactor->GetInitialized()) {
vtkHandleMessage2(msg->hwnd, msg->message, msg->lParam,
msg->wParam, this->Interactor);
}
}
return false;
}
D:\VTK,D:\VTK\Parallel,D:\VTK\Hybrid,D:\VTK\Patented,D:\VTK\Rendering,D:\VTK\IO,D:\VTK\Imaging,D:\VTK\Graphics,D:\VTK\Filtering,D:\VTK\Common
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:\VTK\bin\debug