From be292046d8504279a70d61fc91f8ad0f4a625fe4 Mon Sep 17 00:00:00 2001 From: Yannick Verdie Date: Sat, 12 Jun 2010 18:08:27 +0000 Subject: [PATCH] working on QT change/get win property (done) Fullscreen done change autoresize dynamically done --- modules/highgui/src/precomp.hpp | 10 ++++- modules/highgui/src/window.cpp | 6 +-- modules/highgui/src/window_QT.cpp | 74 ++++++++++++++++++++++++++----- modules/highgui/src/window_QT.h | 2 + 4 files changed, 77 insertions(+), 15 deletions(-) diff --git a/modules/highgui/src/precomp.hpp b/modules/highgui/src/precomp.hpp index 32340baa3d..27986c6498 100644 --- a/modules/highgui/src/precomp.hpp +++ b/modules/highgui/src/precomp.hpp @@ -165,11 +165,19 @@ CvVideoWriter* cvCreateVideoWriter_GStreamer( const char* filename, int fourcc, double cvGetModeWindow_W32(const char* name); double cvGetModeWindow_GTK(const char* name); double cvGetModeWindow_CARBON(const char* name); -double cvGetModeWindow_QT(const char* name); + void cvSetModeWindow_W32(const char* name, double prop_value); void cvSetModeWindow_GTK(const char* name, double prop_value); void cvSetModeWindow_CARBON(const char* name, double prop_value); + + +//for QT +#if defined (HAVE_QT) +double cvGetModeWindow_QT(const char* name); void cvSetModeWindow_QT(const char* name, double prop_value); +double cvGetPropWindow_QT(const char* name); +void cvSetPropWindow_QT(const char* name,double prop_value); +#endif /*namespace cv { diff --git a/modules/highgui/src/window.cpp b/modules/highgui/src/window.cpp index 868d95bbe9..887cbfe9c4 100644 --- a/modules/highgui/src/window.cpp +++ b/modules/highgui/src/window.cpp @@ -66,7 +66,7 @@ CV_IMPL void cvSetWindowProperty(const char* name, int prop_id, double prop_valu case CV_WND_PROP_AUTOSIZE: #if defined (HAVE_QT) - //cvChangeSizeWindow_QT(name,prop_value); + cvSetPropWindow_QT(name,prop_value); #endif break; @@ -102,9 +102,9 @@ CV_IMPL double cvGetWindowProperty(const char* name, int prop_id) return -1; #if defined (HAVE_QT) - //cvGetSizeWindow_QT(name,prop_value); + return cvGetPropWindow_QT(name); #else - return -1; + return -1; #endif default: diff --git a/modules/highgui/src/window_QT.cpp b/modules/highgui/src/window_QT.cpp index 52b1caed75..5eff481165 100755 --- a/modules/highgui/src/window_QT.cpp +++ b/modules/highgui/src/window_QT.cpp @@ -53,7 +53,28 @@ QWaitCondition key_pressed; QMutex mutexKey; //end static and global -//end declaration + +double cvGetPropWindow_QT(const char* name) +{ + double result = -1; + QMetaObject::invokeMethod(&guiMainThread, + "getPropWindow", + //Qt::DirectConnection, + Qt::AutoConnection, + Q_RETURN_ARG(double, result), + Q_ARG(QString, QString(name))); + return result; +} + +void cvSetPropWindow_QT(const char* name,double prop_value) +{ + QMetaObject::invokeMethod(&guiMainThread, + "setPropWindow", + Qt::AutoConnection, + Q_ARG(QString, QString(name)), + Q_ARG(double, prop_value)); +} + void cvSetModeWindow_QT(const char* name, double prop_value) { QMetaObject::invokeMethod(&guiMainThread, @@ -65,7 +86,7 @@ void cvSetModeWindow_QT(const char* name, double prop_value) double cvGetModeWindow_QT(const char* name) { - double result; + double result = -1; QMetaObject::invokeMethod(&guiMainThread, "isFullScreen", @@ -405,6 +426,44 @@ GuiReceiver::GuiReceiver() : _bTimeOut(false) qApp->setQuitOnLastWindowClosed ( false );//maybe the user would like to access this setting } +double GuiReceiver::getPropWindow(QString name) +{ + QPointer w = icvFindWindowByName( name.toLatin1().data() ); + + + if (!w) + return -1; + + return (double)w->flags; +} + +void GuiReceiver::setPropWindow(QString name, double arg2 ) +{ + QPointer w = icvFindWindowByName( name.toLatin1().data() ); + + if (!w) + return; + + int flags = (int) arg2; + + if (w->flags == flags)//nothing to do + return; + + + switch(flags) + { + case CV_WINDOW_NORMAL: + w->layout->setSizeConstraint(QLayout::SetMinAndMaxSize); + w->flags = flags; + break; + case CV_WINDOW_AUTOSIZE: + w->layout->setSizeConstraint(QLayout::SetFixedSize); + w->flags = flags; + break; + default:; + } +} + double GuiReceiver::isFullScreen(QString name) { QPointer w = icvFindWindowByName( name.toLatin1().data() ); @@ -602,16 +661,9 @@ CvTrackbar::CvTrackbar(CvWindow* arg, QString name, int* value, int count, CvTra QObject::connect( slider, SIGNAL( valueChanged( int ) ),this, SLOT( update( int ) ) ); - //if I connect those two signals in not-multiThreads mode, - //the code crashes when we move the trackbar and then click on the button, ... why ? - //so I disable the button - - if (multiThreads) - QObject::connect( label, SIGNAL( clicked() ),this, SLOT( createDialog() )); - else - label->setEnabled(false); + QObject::connect( label, SIGNAL( clicked() ),this, SLOT( createDialog() )); - label->setStyleSheet("QPushButton:disabled {color: black}"); + //label->setStyleSheet("QPushButton:disabled {color: black}"); addWidget(label);//name + value addWidget(slider);//slider diff --git a/modules/highgui/src/window_QT.h b/modules/highgui/src/window_QT.h index ada693c35d..263d46e84b 100644 --- a/modules/highgui/src/window_QT.h +++ b/modules/highgui/src/window_QT.h @@ -100,6 +100,8 @@ public slots: void timeOut(); void toggleFullScreen(QString name, double flags ); double isFullScreen(QString name); + double getPropWindow(QString name); + void setPropWindow(QString name, double flags ); }; class CvTrackbar : public QHBoxLayout