diff --git a/modules/highgui/include/opencv2/highgui.hpp b/modules/highgui/include/opencv2/highgui.hpp index b9cff72299..2f005da5cf 100644 --- a/modules/highgui/include/opencv2/highgui.hpp +++ b/modules/highgui/include/opencv2/highgui.hpp @@ -196,7 +196,8 @@ enum WindowPropertyFlags { WND_PROP_FULLSCREEN = 0, //!< fullscreen property (can be WINDOW_NORMAL or WINDOW_FULLSCREEN). WND_PROP_AUTOSIZE = 1, //!< autosize property (can be WINDOW_NORMAL or WINDOW_AUTOSIZE). WND_PROP_ASPECT_RATIO = 2, //!< window's aspect ration (can be set to WINDOW_FREERATIO or WINDOW_KEEPRATIO). - WND_PROP_OPENGL = 3 //!< opengl support. + WND_PROP_OPENGL = 3, //!< opengl support. + WND_PROP_VISIBLE = 4 //!< checks whether the window exists and is visible }; //! Mouse Events see cv::MouseCallback diff --git a/modules/highgui/include/opencv2/highgui/highgui_c.h b/modules/highgui/include/opencv2/highgui/highgui_c.h index 32ee0e55c8..71c08cac33 100644 --- a/modules/highgui/include/opencv2/highgui/highgui_c.h +++ b/modules/highgui/include/opencv2/highgui/highgui_c.h @@ -111,6 +111,7 @@ enum CV_WND_PROP_AUTOSIZE = 1, //to change/get window's autosize property CV_WND_PROP_ASPECTRATIO= 2, //to change/get window's aspectratio property CV_WND_PROP_OPENGL = 3, //to change/get window's opengl support + CV_WND_PROP_VISIBLE = 4, //These 2 flags are used by cvNamedWindow and cvSet/GetWindowProperty CV_WINDOW_NORMAL = 0x00000000, //the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size diff --git a/modules/highgui/src/precomp.hpp b/modules/highgui/src/precomp.hpp index 0b63c3a01b..d9e7ad8b1c 100644 --- a/modules/highgui/src/precomp.hpp +++ b/modules/highgui/src/precomp.hpp @@ -123,6 +123,7 @@ double cvGetRatioWindow_QT(const char* name); void cvSetRatioWindow_QT(const char* name,double prop_value); double cvGetOpenGlProp_QT(const char* name); +double cvGetPropVisible_QT(const char* name); #endif #endif /* __HIGHGUI_H_ */ diff --git a/modules/highgui/src/window.cpp b/modules/highgui/src/window.cpp index 4d63b372ed..f9496f5335 100644 --- a/modules/highgui/src/window.cpp +++ b/modules/highgui/src/window.cpp @@ -153,6 +153,14 @@ CV_IMPL double cvGetWindowProperty(const char* name, int prop_id) #endif break; + case CV_WND_PROP_VISIBLE: + #if defined (HAVE_QT) + return cvGetPropVisible_QT(name); + #else + return -1; + #endif + break; + default: return -1; } diff --git a/modules/highgui/src/window_QT.cpp b/modules/highgui/src/window_QT.cpp index bccdd2496c..4cfce66c3c 100644 --- a/modules/highgui/src/window_QT.cpp +++ b/modules/highgui/src/window_QT.cpp @@ -138,6 +138,20 @@ double cvGetRatioWindow_QT(const char* name) return result; } +double cvGetPropVisible_QT(const char* name) { + if (!guiMainThread) + CV_Error( CV_StsNullPtr, "NULL guiReceiver (please create a window)" ); + + double result = 0; + + QMetaObject::invokeMethod(guiMainThread, + "getWindowVisible", + autoBlockingConnection(), + Q_RETURN_ARG(double, result), + Q_ARG(QString, QString(name))); + + return result; +} void cvSetRatioWindow_QT(const char* name,double prop_value) { @@ -903,6 +917,16 @@ double GuiReceiver::getPropWindow(QString name) return (double) w->getPropWindow(); } +double GuiReceiver::getWindowVisible(QString name) +{ + QPointer w = icvFindWindowByName(name); + + if (!w) + return 0; + + return (double) w->isVisible(); +} + void GuiReceiver::setPropWindow(QString name, double arg2) { diff --git a/modules/highgui/src/window_QT.h b/modules/highgui/src/window_QT.h index df80568cf0..641dfebd81 100644 --- a/modules/highgui/src/window_QT.h +++ b/modules/highgui/src/window_QT.h @@ -132,6 +132,7 @@ public slots: double getPropWindow(QString name); void setPropWindow(QString name, double flags ); void setWindowTitle(QString name, QString title); + double getWindowVisible(QString name); double getRatioWindow(QString name); void setRatioWindow(QString name, double arg2 ); void saveWindowParameters(QString name);