Skip to content

Commit eeba833

Browse files
committed
Make Qt examples build with either Qt4 or Qt5.
1) Added conditional instructions to the CMakeList.txt files based on VTK_QT_VERSION. 2) Cleaned up the CmakeLists.txt files to make them more consistent. 3) Added QT_VERSION ifdefs, where appropriate, to take into account differences between Qt5 and Qt4. Change-Id: I738a4782dda7ef920d7418918e6ec3938f1c2297 Signed-off-by: Andrew Maclean <andrew.amaclean@gmail.com>
1 parent ea31c42 commit eeba833

File tree

8 files changed

+283
-128
lines changed

8 files changed

+283
-128
lines changed

Examples/GUI/Qt/CMakeLists.txt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
# Only enable if Qt 4 is being used for now, Qt 5 will take a little more work.
2-
if(VTK_QT_VERSION VERSION_LESS "5")
1+
add_subdirectory(ImageViewer)
2+
add_subdirectory(SimpleView)
3+
add_subdirectory(Events)
4+
add_subdirectory(FourPaneViewer)
35

4-
add_subdirectory(ImageViewer)
5-
add_subdirectory(SimpleView)
6-
add_subdirectory(Events)
7-
add_subdirectory(FourPaneViewer)
8-
9-
if(TARGET vtkGUISupportQtOpenGL)
10-
add_subdirectory(GraphicsView)
11-
endif()
6+
if(TARGET vtkGUISupportQtOpenGL)
7+
add_subdirectory(GraphicsView)
8+
endif()
129

1310
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/CTestCustom.ctest.in"
1411
"${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.ctest" @ONLY)
15-
endif()
Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
project(QtEvents)
22

3+
cmake_minimum_required(VERSION 2.8)
4+
35
# Eliminate a warning when building in Windows that relates
46
# to static linking of Qt executables to qtmain.lib.
57
# This policy was introduced in CMake version 2.8.11.
@@ -17,32 +19,56 @@ if(NOT VTK_BINARY_DIR)
1719
include(${VTK_USE_FILE})
1820
endif()
1921

20-
# Use what VTK built with
21-
set(QT_QMAKE_EXECUTABLE ${VTK_QT_QMAKE_EXECUTABLE} CACHE FILEPATH "")
22-
set(QT_MOC_EXECUTABLE ${VTK_QT_MOC_EXECUTABLE} CACHE FILEPATH "")
23-
set(QT_UIC_EXECUTABLE ${VTK_QT_UIC_EXECUTABLE} CACHE FILEPATH "")
24-
find_package(Qt4 REQUIRED)
25-
include(${QT_USE_FILE})
22+
if("${VTK_QT_VERSION}" STREQUAL "")
23+
message(FATAL_ERROR "VTK was not built with Qt")
24+
endif()
25+
26+
27+
if(VTK_QT_VERSION VERSION_GREATER "4")
28+
# We have ui files, this will bring in the macro: qt5_wrap_ui
29+
find_package(QT5Widgets REQUIRED QUIET)
30+
else()
31+
find_package(Qt4 REQUIRED)
32+
include(${QT_USE_FILE})
33+
# Use what VTK built with
34+
set(QT_QMAKE_EXECUTABLE ${VTK_QT_QMAKE_EXECUTABLE} CACHE FILEPATH "")
35+
set(QT_MOC_EXECUTABLE ${VTK_QT_MOC_EXECUTABLE} CACHE FILEPATH "")
36+
set(QT_UIC_EXECUTABLE ${VTK_QT_UIC_EXECUTABLE} CACHE FILEPATH "")
37+
endif()
38+
39+
set( Srcs main.cxx GUI4.cxx )
2640

27-
set(SRCS main.cxx)
41+
set( Hdrs GUI4.h )
42+
43+
set( MOC_Hdrs GUI4.h )
44+
45+
set( UIs GUI4.ui )
2846

2947
# Use the include path and library for Qt that is used by VTK.
3048
include_directories(
3149
${CMAKE_CURRENT_BINARY_DIR}
3250
${CMAKE_CURRENT_SOURCE_DIR}
3351
)
3452

35-
include_directories(${VTK_TDX_INCLUDE_PATH})
53+
# Instruct CMake to run moc automatically when needed.
54+
set(CMAKE_AUTOMOC ON)
3655

37-
qt4_wrap_ui(UI_SRCS GUI4.ui)
38-
qt4_wrap_cpp(MOC_SRCS GUI4.h)
39-
list(APPEND SRCS ${MOC_SRCS} GUI4.cxx GUI4.h)
56+
if(VTK_QT_VERSION VERSION_GREATER "4")
57+
qt5_wrap_ui(UI_Srcs ${UIs})
4058

41-
add_executable(qtevents MACOSX_BUNDLE ${SRCS} ${UI_SRCS})
59+
add_executable(qtevents
60+
MACOSX_BUNDLE ${Srcs} ${Hdrs} ${UI_Srcs} ${MOC_Hdrs})
4261

43-
target_link_libraries(qtevents
44-
${QT_LIBRARIES}
45-
${VTK_LIBRARIES}
46-
)
62+
qt5_use_modules(qtevents Core Gui Widgets)
4763

64+
target_link_libraries(qtevents ${VTK_LIBRARIES})
65+
else()
66+
qt4_wrap_ui(UI_Srcs ${UIs})
4867

68+
add_executable(qtevents MACOSX_BUNDLE ${Srcs} ${Hdrs} ${UI_Srcs} ${MOC_Hdrs})
69+
70+
target_link_libraries(qtevents
71+
${QT_LIBRARIES}
72+
${VTK_LIBRARIES}
73+
)
74+
endif()
Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
cmake_minimum_required(VERSION 2.6)
2-
31
project(QtVTKRenderWindows)
42

3+
cmake_minimum_required(VERSION 2.6)
4+
55
# Eliminate a warning when building in Windows that relates
66
# to static linking of Qt executables to qtmain.lib.
77
# This policy was introduced in CMake version 2.8.11.
@@ -19,36 +19,56 @@ if(NOT VTK_BINARY_DIR)
1919
include(${VTK_USE_FILE})
2020
endif()
2121

22-
# Use what VTK built with
23-
set(QT_QMAKE_EXECUTABLE ${VTK_QT_QMAKE_EXECUTABLE} CACHE FILEPATH "")
24-
set(QT_MOC_EXECUTABLE ${VTK_QT_MOC_EXECUTABLE} CACHE FILEPATH "")
25-
set(QT_UIC_EXECUTABLE ${VTK_QT_UIC_EXECUTABLE} CACHE FILEPATH "")
26-
find_package(Qt4 REQUIRED)
27-
include(${QT_USE_FILE})
22+
if("${VTK_QT_VERSION}" STREQUAL "")
23+
message(FATAL_ERROR "VTK was not built with Qt")
24+
endif()
25+
26+
if(VTK_QT_VERSION VERSION_GREATER "4")
27+
# We have ui files, this will bring in the macro: qt5_wrap_ui
28+
find_package(QT5Widgets REQUIRED QUIET)
29+
else()
30+
find_package(Qt4 REQUIRED)
31+
include(${QT_USE_FILE})
32+
# Use what VTK built with
33+
set(QT_QMAKE_EXECUTABLE ${VTK_QT_QMAKE_EXECUTABLE} CACHE FILEPATH "")
34+
set(QT_MOC_EXECUTABLE ${VTK_QT_MOC_EXECUTABLE} CACHE FILEPATH "")
35+
set(QT_UIC_EXECUTABLE ${VTK_QT_UIC_EXECUTABLE} CACHE FILEPATH "")
36+
endif()
2837

2938
# Set your files and resources here
30-
set(QtVTKRenderWindowsSrcs QtVTKRenderWindowsApp.cxx QtVTKRenderWindows.cxx)
31-
set(QtVTKRenderWindowsUI QtVTKRenderWindows.ui)
32-
set(QtVTKRenderWindowsHeaders QtVTKRenderWindows.h)
39+
set( Srcs QtVTKRenderWindowsApp.cxx QtVTKRenderWindows.cxx)
40+
41+
set( Hdrs QtVTKRenderWindows.h )
42+
43+
set( MOC_Hdrs QtVTKRenderWindows.h )
44+
45+
set( UIs QtVTKRenderWindows.ui )
3346

3447
include_directories(
35-
${QT_INCLUDE_DIR}
3648
${CMAKE_CURRENT_BINARY_DIR}
3749
${CMAKE_CURRENT_SOURCE_DIR}
3850
)
3951

40-
qt4_wrap_ui(UISrcs ${QtVTKRenderWindowsUI})
41-
qt4_wrap_cpp(MOCSrcs ${QtVTKRenderWindowsHeaders} )
52+
# Instruct CMake to run moc automatically when needed.
53+
set(CMAKE_AUTOMOC ON)
4254

43-
source_group("Resources" FILES
44-
${QtVTKRenderWindowsUI}
45-
)
55+
if(VTK_QT_VERSION VERSION_GREATER "4")
56+
qt5_wrap_ui(UI_Srcs ${UIs})
4657

47-
source_group("Generated" FILES
48-
${UISrcs}
49-
${MOCSrcs}
50-
${RCS_SOURCES}
51-
)
58+
# CMAKE_AUTOMOC in ON so the MocHdrs will be automatically wrapped.
59+
add_executable(QtVTKRenderWindows ${Srcs} ${Hdrs} ${UI_Srcs} ${MOC_Hdrs})
60+
61+
qt5_use_modules(QtVTKRenderWindows Core Gui Widgets)
5262

53-
add_executable(QtVTKRenderWindows ${QtVTKRenderWindowsSrcs} ${UISrcs} ${MOCSrcs})
54-
target_link_libraries(QtVTKRenderWindows ${QT_LIBRARIES} ${VTK_LIBRARIES})
63+
target_link_libraries(QtVTKRenderWindows ${VTK_LIBRARIES})
64+
else()
65+
include_directories(
66+
${QT_INCLUDE_DIR}
67+
)
68+
69+
qt4_wrap_ui(UI_Srcs ${UIs})
70+
71+
add_executable(QtVTKRenderWindows ${Srcs} ${Hdrs} ${UI_Srcs} ${MOC_Hdrs})
72+
73+
target_link_libraries(QtVTKRenderWindows ${QT_LIBRARIES} ${VTK_LIBRARIES})
74+
endif()
Lines changed: 69 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
if(NOT VTK_USE_QT5)
2-
find_package(Qt4 REQUIRED)
3-
set(QT_USE_QTOPENGL 1)
4-
set(QT_USE_QTWEBKIT 1)
5-
include(${QT_USE_FILE})
6-
else()
7-
find_package(Qt5WebKitWidgets REQUIRED QUIET)
8-
include_directories(${Qt5WebKitWidgets_INCLUDE_DIRS})
9-
add_definitions(${Qt5WebKitWidgets_DEFINITIONS})
10-
set(QT_LIBRARIES ${Qt5WebKitWidgets_LIBRARIES})
1+
project( GraphicsView )
2+
3+
cmake_minimum_required(VERSION 2.8.8)
4+
5+
# Eliminate a warning when building in Windows that relates
6+
# to static linking of Qt executables to qtmain.lib.
7+
# This policy was introduced in CMake version 2.8.11.
8+
# CMake version 2.8.11.2 warns when the policy is not set
9+
# and uses OLD behavior.
10+
if(POLICY CMP0020)
11+
cmake_policy(SET CMP0020 NEW)
1112
endif()
1213

1314
find_package(OpenGL)
@@ -17,28 +18,68 @@ if(NOT VTK_BINARY_DIR)
1718
include(${VTK_USE_FILE})
1819
endif()
1920

20-
if(NOT QT_QTWEBKIT_FOUND OR QT_VERSION_MINOR LESS 6)
21-
message(STATUS "VTK isn't configured to use QtOpenGL, QtWebKit wasn't found, or Qt 4.6 wasn't found. GraphicsView example is disabled.")
21+
if("${VTK_QT_VERSION}" STREQUAL "")
22+
message(FATAL_ERROR "VTK was not built with Qt")
23+
endif()
24+
25+
if(VTK_QT_VERSION VERSION_GREATER "4")
26+
find_package(Qt5WebKitWidgets REQUIRED QUIET)
2227
else()
28+
find_package(Qt4 REQUIRED)
29+
set(QT_USE_QTOPENGL 1)
30+
set(QT_USE_QTWEBKIT 1)
31+
include(${QT_USE_FILE})
32+
endif()
33+
34+
set( Srcs
35+
main.cpp
36+
OpenGLScene.cpp
37+
TreeRingViewItem.cpp
38+
GraphLayoutViewItem.cpp
39+
WebView.cpp
40+
)
41+
42+
set( Hdrs
43+
GraphicsView.hpp
44+
OpenGLScene.hpp
45+
QBoolAnimation.h
46+
TreeRingViewItem.h
47+
GraphLayoutViewItem.h
48+
WebView.h
49+
)
2350

24-
qt4_add_resources(qrcfiles GraphicsView.qrc)
51+
set( MOC_Hdrs
52+
OpenGLScene.hpp
53+
QBoolAnimation.h
54+
WebView.h
55+
)
2556

26-
qt4_wrap_cpp(mocs
27-
OpenGLScene.hpp
28-
QBoolAnimation.h
29-
WebView.h
30-
)
57+
set( QRCs
58+
GraphicsView.qrc
59+
)
3160

32-
add_executable(qtgraphicsview
33-
main.cpp
34-
OpenGLScene.cpp
35-
TreeRingViewItem.cpp
36-
GraphLayoutViewItem.cpp
37-
WebView.cpp
38-
${mocs}
39-
${qrcfiles}
40-
)
61+
# Instruct CMake to run moc automatically when needed.
62+
set(CMAKE_AUTOMOC ON)
63+
64+
if(VTK_QT_VERSION VERSION_GREATER "4")
65+
qt5_add_resources(QRC_Srcs ${QRCs} )
66+
67+
add_executable(qtgraphicsview MACOSX_BUNDLE
68+
${Srcs} ${Hdrs} ${MOC_Hdrs} ${QRC_Srcs})
69+
70+
qt5_use_modules(qtgraphicsview Core Gui Widgets
71+
WebKit WebKitWidgets OpenGL OpenGLExtensions)
72+
73+
target_link_libraries(qtgraphicsview ${VTK_LIBRARIES})
74+
else()
75+
if (NOT QT_QTWEBKIT_FOUND OR QT_VERSION_MINOR LESS 6)
76+
message(STATUS "VTK isn't configured to use QtOpenGL, QtWebKit wasn't found, or Qt 4.6 wasn't found. GraphicsView example is disabled.")
77+
else()
78+
qt4_add_resources(QRC_Srcs ${QRCs})
79+
qt4_wrap_cpp(MOC_Srcs ${MOC_Hdrs})
4180

42-
target_link_libraries(qtgraphicsview ${QT_LIBRARIES} ${VTK_LIBRARIES})
81+
add_executable(qtgraphicsview ${Srcs} ${Hdrs} ${MOC_Hdrs} ${QRC_Srcs})
4382

83+
target_link_libraries(qtgraphicsview ${QT_LIBRARIES} ${VTK_LIBRARIES})
84+
endif()
4485
endif()

Examples/GUI/Qt/GraphicsView/OpenGLScene.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,14 @@ void OpenGLScene::mousePressEvent(QGraphicsSceneMouseEvent* e)
126126
{
127127
QGraphicsScene::mousePressEvent(e);
128128

129-
// see if its under one our our deactivated items
130-
QGraphicsItem* item = itemAt(e->scenePos());
129+
// See if its under one our our deactivated items.
130+
#if QT_VERSION >= 0x050000
131+
// The transform is just the identity matrix.
132+
QGraphicsItem* item = itemAt(e->scenePos(),QTransform());
133+
#else
134+
QGraphicsItem* item = itemAt(e->scenePos());
135+
#endif
136+
131137
if(item == mGraphLayoutView && CurrentState != 0)
132138
{
133139
e->accept();
Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
project(QtImageViewer)
22

3+
cmake_minimum_required(VERSION 2.8)
4+
35
# Eliminate a warning when building in Windows that relates
46
# to static linking of Qt executables to qtmain.lib.
57
# This policy was introduced in CMake version 2.8.11.
@@ -17,18 +19,35 @@ if(NOT VTK_BINARY_DIR)
1719
include(${VTK_USE_FILE})
1820
endif()
1921

20-
# Use what VTK built with
21-
set(QT_QMAKE_EXECUTABLE ${VTK_QT_QMAKE_EXECUTABLE} CACHE FILEPATH "")
22-
set(QT_MOC_EXECUTABLE ${VTK_QT_MOC_EXECUTABLE} CACHE FILEPATH "")
23-
set(QT_UIC_EXECUTABLE ${VTK_QT_UIC_EXECUTABLE} CACHE FILEPATH "")
24-
find_package(Qt4 REQUIRED)
25-
include(${QT_USE_FILE})
22+
if("${VTK_QT_VERSION}" STREQUAL "")
23+
message(FATAL_ERROR "VTK was not built with Qt")
24+
endif()
25+
26+
if(VTK_QT_VERSION VERSION_GREATER "4")
27+
find_package(Qt5Core REQUIRED QUIET)
28+
else()
29+
find_package(Qt4 REQUIRED)
30+
include(${QT_USE_FILE})
31+
# Use what VTK built with
32+
set(QT_QMAKE_EXECUTABLE ${VTK_QT_QMAKE_EXECUTABLE} CACHE FILEPATH "")
33+
set(QT_MOC_EXECUTABLE ${VTK_QT_MOC_EXECUTABLE} CACHE FILEPATH "")
34+
set(QT_UIC_EXECUTABLE ${VTK_QT_UIC_EXECUTABLE} CACHE FILEPATH "")
35+
endif()
36+
37+
set( Srcs main.cxx )
38+
39+
if(VTK_QT_VERSION VERSION_GREATER "4")
40+
add_executable(qtimageviewer ${Srcs})
2641

27-
set(SRCS main.cxx)
42+
qt5_use_modules(qtimageviewer Core Gui Widgets)
2843

29-
add_executable(qtimageviewer MACOSX_BUNDLE ${SRCS})
44+
target_link_libraries(qtimageviewer ${VTK_LIBRARIES})
45+
else()
46+
include_directories(
47+
${QT_INCLUDE_DIR}
48+
)
3049

31-
target_link_libraries(qtimageviewer
32-
${QT_LIBRARIES}
33-
${VTK_LIBRARIES}
34-
)
50+
add_executable(qtimageviewer ${Srcs})
51+
52+
target_link_libraries(qtimageviewer ${QT_LIBRARIES} ${VTK_LIBRARIES})
53+
endif()

0 commit comments

Comments
 (0)