├── README.md ├── src ├── main.cpp └── MainWindow.cpp ├── include └── MainWindow.h ├── forms └── MainWindow.ui └── CMakeLists.txt /README.md: -------------------------------------------------------------------------------- 1 | # QtVTKTutorial 2 | Sample project for the Qt VTK CMake project tutorial. 3 | 4 | Tutorial Links: 5 | 6 | (Part 1)[] 7 | (Part 2)[] 8 | (Part 3)[] -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char *argv[]) { 5 | QApplication app(argc, argv); 6 | 7 | MainWindow mainWindow; 8 | mainWindow.show(); 9 | 10 | return app.exec(); 11 | } -------------------------------------------------------------------------------- /include/MainWindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | namespace Ui { 12 | class MainWindow; 13 | } 14 | 15 | class MainWindow : public QMainWindow 16 | { 17 | Q_OBJECT 18 | 19 | private: 20 | Ui::MainWindow *ui; 21 | 22 | vtkSmartPointer mRenderWindow; 23 | vtkSmartPointer mRenderer; 24 | vtkSmartPointer mInteractor; 25 | vtkSmartPointer mInteractorStyle; 26 | 27 | public: 28 | explicit MainWindow(QWidget *parent = nullptr); 29 | ~MainWindow(); 30 | 31 | public slots: 32 | void onDrawSphereClick(); 33 | 34 | }; 35 | 36 | #endif // MAINWINDOW_H 37 | -------------------------------------------------------------------------------- /forms/MainWindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 800 10 | 600 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | Draw Sphere 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 0 34 | 0 35 | 800 36 | 21 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | QVTKOpenGLWidget 45 | QOpenGLWidget 46 |
qvtkopenglwidget.h
47 |
48 |
49 | 50 | 51 |
52 | -------------------------------------------------------------------------------- /src/MainWindow.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "ui_MainWindow.h" 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | MainWindow::MainWindow(QWidget *parent) : 10 | QMainWindow(parent), 11 | ui(new Ui::MainWindow), 12 | mRenderWindow(vtkSmartPointer::New()), 13 | mRenderer(vtkSmartPointer::New()), 14 | mInteractor(vtkSmartPointer::New()), 15 | mInteractorStyle(vtkSmartPointer::New()) 16 | { 17 | ui->setupUi(this); 18 | 19 | // Set up the rendering 20 | mRenderWindow->AddRenderer(mRenderer); 21 | mRenderWindow->SetInteractor(mInteractor); 22 | ui->openGLWidget->SetRenderWindow(mRenderWindow); 23 | mInteractor->SetInteractorStyle(mInteractorStyle); 24 | mInteractor->Initialize(); 25 | 26 | // Set the background color 27 | mRenderer->SetBackground(1, 0, 0); 28 | 29 | // Set the UI connections 30 | QObject::connect(ui->drawSphere_button, &QPushButton::clicked, 31 | this, &MainWindow::onDrawSphereClick); 32 | } 33 | 34 | MainWindow::~MainWindow() { 35 | delete ui; 36 | } 37 | 38 | void MainWindow::onDrawSphereClick() { 39 | // Create sphere 40 | vtkSmartPointer sphereSource = 41 | vtkSmartPointer::New(); 42 | sphereSource->SetRadius(5); 43 | sphereSource->Update(); 44 | 45 | // Create the actor where the sphere is rendered 46 | vtkSmartPointer sphereMapper = 47 | vtkSmartPointer::New(); 48 | sphereMapper->SetInputData(sphereSource->GetOutput()); 49 | 50 | vtkSmartPointer sphere = vtkSmartPointer::New(); 51 | sphere->SetMapper(sphereMapper); 52 | 53 | // Add the sphere actor to the OpenGL 54 | mRenderer->AddViewProp(sphere); 55 | mRenderer->ResetCamera(); 56 | mRenderWindow->Render(); 57 | } 58 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.17) 2 | 3 | project(QtVTKProject) 4 | 5 | #======================= INCLUSION OF Qt =======================# 6 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 7 | set(CMAKE_AUTOMOC ON) 8 | set(CMAKE_AUTOUIC ON) 9 | set(CMAKE_PREFIX_PATH $ENV{QTDIR}) 10 | find_package(OpenGL) 11 | find_package(Qt5Core REQUIRED) 12 | find_package(Qt5Gui REQUIRED) 13 | find_package(Qt5OpenGL REQUIRED) 14 | find_package(Qt5Xml REQUIRED) 15 | find_package(Qt5Widgets REQUIRED) 16 | 17 | #======================= INCLUSION OF VTK ======================# 18 | set(VTK_DIR $ENV{VTK_DIR}) 19 | find_package(VTK REQUIRED) 20 | include(${VTK_USE_FILE}) 21 | 22 | #======================= INCLUSION OF Our Code ======================# 23 | set(FORMS_DIR "${CMAKE_SOURCE_DIR}/forms") 24 | set(INCLUDE_DIR "${CMAKE_SOURCE_DIR}/include") 25 | set(SOURCE_DIR "${CMAKE_SOURCE_DIR}/src") 26 | 27 | include_directories(${FORMS_DIR}) 28 | include_directories(${INCLUDE_DIR}) 29 | include_directories(${SOURCE_DIR}) 30 | 31 | file(GLOB_RECURSE SOURCES 32 | "${FORMS_DIR}/*.ui" 33 | "${INCLUDE_DIR}/*.h" 34 | "${SOURCE_DIR}/*.cpp" 35 | ) 36 | 37 | # Add the forms directory to the AUTOUIC search paths 38 | set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_AUTOUIC_SEARCH_PATHS} ${FORMS_DIR}) 39 | 40 | # Add the executable 41 | if (WIN32) 42 | add_executable(QtVTKProject WIN32 ${SOURCES}) 43 | elseif(UNIX) 44 | add_executable(QtVTKProject ${SOURCES}) 45 | endif() 46 | 47 | # Add the target includes 48 | target_include_directories(QtVTKProject PRIVATE ${FORMS_DIR}) 49 | target_include_directories(QtVTKProject PRIVATE ${INCLUDE_DIR}) 50 | target_include_directories(QtVTKProject PRIVATE ${SOURCE_DIR}) 51 | 52 | #===================== LINKING LIBRARIES =======================# 53 | target_link_libraries( QtVTKProject Qt5::OpenGL) 54 | target_link_libraries( QtVTKProject Qt5::Xml) 55 | target_link_libraries( QtVTKProject Qt5::Widgets) 56 | target_link_libraries( QtVTKProject ${QT_LIBRARIES} ${OPENGL_LIBRARIES}) 57 | target_link_libraries( QtVTKProject ${VTK_LIBRARIES}) --------------------------------------------------------------------------------