ShowEvent
vtk-examples/Cxx/Qt/ShowEvent
Description¶
Small example (not doing anything actually) to show the use of the overwritten QWidget::showEvent() function to initialize the VTK widget when it is actually used, not directly in the constructor.
Question
If you have a question about this example, please use the VTK Discourse Forum
Code¶
ShowEvent.cxx
#include <iostream>
#include "ShowEvent.h"
#include "ui_ShowEvent.h"
ShowEvent::ShowEvent(QWidget* parent) : QWidget(parent), ui(new Ui::ShowEvent)
{
this->ui->setupUi(this);
// Do not do anything related to VTK display here!
std::cout << "Constructor" << std::endl;
}
void ShowEvent::showEvent(QShowEvent*)
{
// Instead, do the VTK display things here!
std::cout << "VTK Stuff" << std::endl;
}
ShowEvent.h
#ifndef ShowEventQt_H
#define ShowEventQt_H
#include <QMainWindow>
/*
* See "The Single Inheritance Approach" in this link:
* [Using a Designer UI File in Your C++
* Application](https://doc.qt.io/qt-5/designer-using-a-ui-file.html)
*/
namespace Ui {
class ShowEvent;
}
class ShowEvent : public QWidget //, private Ui::ShowEvent
{
Q_OBJECT
public:
explicit ShowEvent(QWidget* parent = nullptr);
virtual ~ShowEvent() = default;
private:
Ui::ShowEvent* ui;
protected:
void showEvent(QShowEvent* event);
};
#endif
ShowEventDriver.cxx
#include <QApplication>
#include "ShowEvent.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
ShowEvent showEvent;
showEvent.show();
return app.exec();
}
ShowEvent.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ShowEvent</class>
<widget class="QWidget" name="ShowEvent">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>312</width>
<height>243</height>
</rect>
</property>
<property name="windowTitle">
<string>ShowEvent</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QGraphicsView" name="graphicsView">
<property name="backgroundBrush">
<brush brushstyle="NoBrush">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
CMakeLists.txt¶
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
project(ShowEvent)
find_package(VTK COMPONENTS
)
if (NOT VTK_FOUND)
message(FATAL_ERROR "ShowEvent: Unable to find the VTK build folder.")
endif()
# Prevent a "command line is too long" failure in Windows.
set(CMAKE_NINJA_FORCE_RESPONSE_FILE "ON" CACHE BOOL "Force Ninja to use response files.")
add_executable(ShowEvent MACOSX_BUNDLE ShowEvent.cxx )
target_link_libraries(ShowEvent PRIVATE ${VTK_LIBRARIES}
)
# vtk_module_autoinit is needed
vtk_module_autoinit(
TARGETS ShowEvent
MODULES ${VTK_LIBRARIES}
)
Download and Build ShowEvent¶
Click here to download ShowEvent and its CMakeLists.txt file. Once the tarball ShowEvent.tar has been downloaded and extracted,
cd ShowEvent/build
If VTK is installed:
cmake ..
If VTK is not installed but compiled on your system, you will need to specify the path to your VTK build:
cmake -DVTK_DIR:PATH=/home/me/vtk_build ..
Build the project:
make
and run it:
./ShowEvent
WINDOWS USERS
Be sure to add the VTK bin directory to your path. This will resolve the VTK dll's at run time.