highgui: add property WND_PROP_VISIBLE

checks whether the window exists and is visible. On QT closing a window
merley hides it, so the common hack for checking whether a window exists

exists = cv2.getWindowProperty(.., 0) >= 0

does not work.
pull/7561/head
Pavel Rojtberg 9 years ago
parent 8333ea41e2
commit 358ec04413
  1. 3
      modules/highgui/include/opencv2/highgui.hpp
  2. 1
      modules/highgui/include/opencv2/highgui/highgui_c.h
  3. 1
      modules/highgui/src/precomp.hpp
  4. 8
      modules/highgui/src/window.cpp
  5. 24
      modules/highgui/src/window_QT.cpp
  6. 1
      modules/highgui/src/window_QT.h

@ -196,7 +196,8 @@ enum WindowPropertyFlags {
WND_PROP_FULLSCREEN = 0, //!< fullscreen property (can be WINDOW_NORMAL or WINDOW_FULLSCREEN). 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_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_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 //! Mouse Events see cv::MouseCallback

@ -111,6 +111,7 @@ enum
CV_WND_PROP_AUTOSIZE = 1, //to change/get window's autosize property 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_ASPECTRATIO= 2, //to change/get window's aspectratio property
CV_WND_PROP_OPENGL = 3, //to change/get window's opengl support 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 //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 CV_WINDOW_NORMAL = 0x00000000, //the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size

@ -123,6 +123,7 @@ double cvGetRatioWindow_QT(const char* name);
void cvSetRatioWindow_QT(const char* name,double prop_value); void cvSetRatioWindow_QT(const char* name,double prop_value);
double cvGetOpenGlProp_QT(const char* name); double cvGetOpenGlProp_QT(const char* name);
double cvGetPropVisible_QT(const char* name);
#endif #endif
#endif /* __HIGHGUI_H_ */ #endif /* __HIGHGUI_H_ */

@ -153,6 +153,14 @@ CV_IMPL double cvGetWindowProperty(const char* name, int prop_id)
#endif #endif
break; break;
case CV_WND_PROP_VISIBLE:
#if defined (HAVE_QT)
return cvGetPropVisible_QT(name);
#else
return -1;
#endif
break;
default: default:
return -1; return -1;
} }

@ -138,6 +138,20 @@ double cvGetRatioWindow_QT(const char* name)
return result; 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) void cvSetRatioWindow_QT(const char* name,double prop_value)
{ {
@ -903,6 +917,16 @@ double GuiReceiver::getPropWindow(QString name)
return (double) w->getPropWindow(); return (double) w->getPropWindow();
} }
double GuiReceiver::getWindowVisible(QString name)
{
QPointer<CvWindow> w = icvFindWindowByName(name);
if (!w)
return 0;
return (double) w->isVisible();
}
void GuiReceiver::setPropWindow(QString name, double arg2) void GuiReceiver::setPropWindow(QString name, double arg2)
{ {

@ -132,6 +132,7 @@ public slots:
double getPropWindow(QString name); double getPropWindow(QString name);
void setPropWindow(QString name, double flags ); void setPropWindow(QString name, double flags );
void setWindowTitle(QString name, QString title); void setWindowTitle(QString name, QString title);
double getWindowVisible(QString name);
double getRatioWindow(QString name); double getRatioWindow(QString name);
void setRatioWindow(QString name, double arg2 ); void setRatioWindow(QString name, double arg2 );
void saveWindowParameters(QString name); void saveWindowParameters(QString name);

Loading…
Cancel
Save