Environment:

macOS Mojave 10.14
Qt Creator 4.41
Qt 5.9.2
Clang 7.0 apple, 64 bits
VTK 8.1.1

Our project shows:

Add 3D model in VTK widget means we need to intergrate VTK and Qt development environment. Here are a few notes about it.

I put a cone in QVTKOpenGLWidget, and there is a button on the right side.
There are many problems when using QVTKOpenGLWidget for the first time. We have many setting for it comparing to QVTKWidget.
I wrote a relative article about it at CSDN, here is a link:
QVTKOpenGLWidget使用问题记录

A few important code file shows below:
CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

project(vtkInQtExample)

find_package( VTK REQUIRED )
include( ${VTK_USE_FILE} )

# add header files which are generated by qt
include_directories( ${CMAKE_CURRENT_BINARY_DIR} )

file(GLOB UI_FILES *.ui)
file(GLOB HEADER_FILES
    *.h
    *.hpp
    )
file(GLOB CXX_FILES
    *.cxx
    *.cpp
    )

if(${VTK_VERSION} VERSION_GREATER "6" AND VTK_QT_VERSION VERSION_GREATER "4")
  qt5_wrap_ui(UISrcs ${UI_FILES} )
  # CMAKE_AUTOMOC in ON so the MOC headers will be automatically wrapped.
  set( CMAKE_AUTOMOC ON )
  add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${HEADER_FILES} ${CXX_FILES} ${UISrcs} )
  qt5_use_modules(${PROJECT_NAME} Core Gui)
else()
  QT4_WRAP_UI(UISrcs ${UI_FILES})
  QT4_WRAP_CPP(MOCSrcs ${HEADER_FILES})
  add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${CXX_FILES} ${UISrcs} ${MOCSrcs})
endif()

target_link_libraries( ${PROJECT_NAME} ${VTK_LIBRARIES} )

main.cpp

#include "widget.h"
#include <QApplication>

#include <qsurfaceformat.h>
#include <QVTKOpenGLWidget.h>

int main(int argc, char *argv[])
{
    // needed to ensure appropriate OpenGL context is created for VTK rendering.
    QSurfaceFormat::setDefaultFormat(QVTKOpenGLWidget::defaultFormat());

    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.h

#include "widget.h"
#include "ui_widget.h"

#include <vtkGenericOpenGLRenderWindow.h>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget),
    coneActor( vtkSmartPointer<vtkActor>::New() )
{
    ui->setupUi(this);

    vtkSmartPointer<vtkConeSource> cone =
            vtkSmartPointer<vtkConeSource>::New();

    vtkSmartPointer<vtkPolyDataMapper> coneMapper =
            vtkSmartPointer<vtkPolyDataMapper>::New();
    coneMapper->SetInputConnection( cone->GetOutputPort() );
    coneActor->SetMapper( coneMapper );
    vtkSmartPointer<vtkRenderer> backRenderer =
            vtkSmartPointer<vtkRenderer>::New();
    backRenderer->AddActor( coneActor );
    backRenderer->SetBackground( 1, 1, 1 );

    vtkSmartPointer<vtkGenericOpenGLRenderWindow> backWindow =
            vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
    backWindow->AddRenderer( backRenderer );

    ui->qvtkWidget->SetRenderWindow( backWindow );
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{

}

All code files are uploaded to GitHub:
https://github.com/theArcticOcean/CLib/tree/master/VTKLearn/vtkInQtExample


0 0 votes
Article Rating
Subscribe
Notify of
guest

1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback

[…] have an example which uses cmake to build the qt5 project: use-vtk-in-qt-widget-example But that workflow seems a cheat, I used Qt Creator to create a qmake project and wrote […]

Content Summary
: Input your strings, the tool can get a brief summary of the content for you.

X
1
0
Would love your thoughts, please comment.x
()
x