find_package(Qt${QT_VERSION_MAJOR} COMPONENTS OpenGL QUIET)
if(Qt${QT_VERSION_MAJOR}OpenGL_FOUND)
set(QT_QTOPENGL_FOUND ON) # HAVE_QT_OPENGL is defined below
+ if(QT_VERSION_MAJOR GREATER 5) # QGL -> QOpenGL
+ find_package(Qt${QT_VERSION_MAJOR} COMPONENTS OpenGLWidgets QUIET)
+ if(NOT Qt${QT_VERSION_MAJOR}OpenGLWidgets_FOUND)
+ message(STATUS "Qt OpenGLWidgets component not found: turning off Qt OpenGL functionality")
+ set(QT_QTOPENGL_FOUND FALSE)
+ endif()
+ endif()
endif()
endif()
endif()
set(CMAKE_INCLUDE_CURRENT_DIR ON)
if(QT_VERSION_MAJOR EQUAL 6)
+ add_definitions(-DHAVE_QT6) # QGLWidget deprecated for QT6, use this preprocessor to adjust window_QT.[h,cpp]
QT6_ADD_RESOURCES(_RCC_OUTFILES ${CMAKE_CURRENT_LIST_DIR}/src/window_QT.qrc)
QT6_WRAP_CPP(_MOC_OUTFILES ${CMAKE_CURRENT_LIST_DIR}/src/window_QT.h)
elseif(QT_VERSION_MAJOR EQUAL 5)
set(qt_deps Core Gui Widgets Test Concurrent)
if(HAVE_QT_OPENGL)
add_definitions(-DHAVE_QT_OPENGL)
+ # QOpenGLWidget requires Qt6 package component OpenGLWidgets
+ if(QT_VERSION_MAJOR GREATER 5)
+ list(APPEND qt_deps OpenGLWidgets)
+ endif()
list(APPEND qt_deps OpenGL)
endif()
#ifdef HAVE_QT_OPENGL
-OpenGlViewPort::OpenGlViewPort(QWidget* _parent) : QGLWidget(_parent), OCVViewPort(), size(-1, -1)
+
+// QOpenGLWidget vs QGLWidget info: https://www.qt.io/blog/2014/09/10/qt-weekly-19-qopenglwidget
+OpenGlViewPort::OpenGlViewPort(QWidget* _parent) : OpenCVQtWidgetBase(_parent), OCVViewPort(), size(-1, -1)
{
glDrawCallback = 0;
glDrawData = 0;
void OpenGlViewPort::updateGl()
{
+ #ifdef HAVE_QT6
+ QOpenGLWidget::update();
+ #else
QGLWidget::updateGL();
+ #endif
}
void OpenGlViewPort::initializeGL()
void OpenGlViewPort::wheelEvent(QWheelEvent* evnt)
{
icvmouseEvent((QMouseEvent *)evnt, mouse_wheel);
- QGLWidget::wheelEvent(evnt);
+ OpenCVQtWidgetBase::wheelEvent(evnt);
}
void OpenGlViewPort::mousePressEvent(QMouseEvent* evnt)
{
icvmouseEvent(evnt, mouse_down);
- QGLWidget::mousePressEvent(evnt);
+ OpenCVQtWidgetBase::mousePressEvent(evnt);
}
void OpenGlViewPort::mouseReleaseEvent(QMouseEvent* evnt)
{
icvmouseEvent(evnt, mouse_up);
- QGLWidget::mouseReleaseEvent(evnt);
+ OpenCVQtWidgetBase::mouseReleaseEvent(evnt);
}
void OpenGlViewPort::mouseDoubleClickEvent(QMouseEvent* evnt)
{
icvmouseEvent(evnt, mouse_dbclick);
- QGLWidget::mouseDoubleClickEvent(evnt);
+ OpenCVQtWidgetBase::mouseDoubleClickEvent(evnt);
}
void OpenGlViewPort::mouseMoveEvent(QMouseEvent* evnt)
{
icvmouseEvent(evnt, mouse_move);
- QGLWidget::mouseMoveEvent(evnt);
+ OpenCVQtWidgetBase::mouseMoveEvent(evnt);
}
{
if (size.width() > 0 && size.height() > 0)
return size;
-
- return QGLWidget::sizeHint();
+ return OpenCVQtWidgetBase::sizeHint();
}
void OpenGlViewPort::setSize(QSize size_)
updateGeometry();
}
-#endif
+#endif //HAVE_QT_OPENGL
#endif // HAVE_QT
#if defined( HAVE_QT_OPENGL )
#include <QtOpenGL>
-#include <QGLWidget>
+
+ // QGLWidget deprecated and no longer functions with Qt6, use QOpenGLWidget instead
+ #ifdef HAVE_QT6
+ #include <QOpenGLWidget>
+ #else
+ #include <QGLWidget>
+ #endif
+
#endif
#include <QAbstractEventDispatcher>
#ifdef HAVE_QT_OPENGL
-class OpenGlViewPort : public QGLWidget, public OCVViewPort
+// Use QOpenGLWidget for Qt6 (QGLWidget is deprecated)
+#ifdef HAVE_QT6
+typedef QOpenGLWidget OpenCVQtWidgetBase;
+#else
+typedef QGLWidget OpenCVQtWidgetBase;
+#endif
+
+class OpenGlViewPort : public OpenCVQtWidgetBase, public OCVViewPort
{
public:
explicit OpenGlViewPort(QWidget* parent);