diff --git a/cvconfig.h.cmake b/cvconfig.h.cmake index 4299d7bd1a..d21d8c040f 100644 --- a/cvconfig.h.cmake +++ b/cvconfig.h.cmake @@ -160,12 +160,6 @@ /* Eigen2 Matrix & Linear Algebra Library */ #cmakedefine HAVE_EIGEN2 -/* Qt bindings */ -//#cmakedefine HAVE_QT - -/* Qt bindings use OpenGL */ -//#cmakedefine HAVE_QT_OPENGL - /* NVidia Cuda Runtime API*/ #cmakedefine HAVE_CUDA diff --git a/modules/highgui/src/window_QT.cpp b/modules/highgui/src/window_QT.cpp index 2b02861e6a..9307841cb2 100755 --- a/modules/highgui/src/window_QT.cpp +++ b/modules/highgui/src/window_QT.cpp @@ -407,7 +407,7 @@ CvTrackbar* icvFindTrackbarByName( const char* name_trackbar, const char* name_w if (result) return (CvTrackbar*) result; - return (CvTrackbar*) icvFindBarbyName(w->parameters_window->myLayout, nameQt, type_CvTrackbar); + return (CvTrackbar*) icvFindBarbyName(global_control_panel->myLayout, nameQt, type_CvTrackbar); } return NULL; @@ -460,10 +460,7 @@ CV_IMPL int cvNamedWindow( const char* name, int flags ) if (multiThreads) QMetaObject::invokeMethod(guiMainThread, "createWindow", - //Qt::AutoConnection, Qt::BlockingQueuedConnection, - //TypeConnection, - //Qt::AutoConnection, Q_ARG(QString, QString(name)), Q_ARG(int, flags)); else @@ -892,7 +889,6 @@ void GuiReceiver::displayStatusBar( QString name, QString text, int delayms ) void GuiReceiver::showImage(QString name, void* arr) { - //qDebug()<<"inshowimage"< w = icvFindWindowByName( name.toLatin1().data() ); if (!w)//as observed in the previous implementation (W32, GTK or Carbon), create a new window is the pointer returned is null @@ -973,6 +969,23 @@ void GuiReceiver::resizeWindow(QString name, int width, int height) w->resize(width, height); } +void GuiReceiver::enablePropertiesButtonEachWindow() +{ + CvWindow* w; + + //For each window, enable window property button + foreach (QWidget *widget, QApplication::topLevelWidgets()) + { + + if (widget->isWindow() && !widget->parentWidget ())//is a window without parent + { + w = (CvWindow*) widget; + //active window properties button + w->vect_QActions[9]->setDisabled(false); + } + } +} + void GuiReceiver::addButton(QString button_name, int button_type, int initial_button_state , void* on_change, void* userdata) { @@ -987,6 +1000,8 @@ void GuiReceiver::addButton(QString button_name, int button_type, int initial_bu if (global_control_panel->myLayout->count() == 0)//if that is the first button attach to the control panel, create a new button bar { b = CvWindow::createButtonbar(button_name);//the bar has the name of the first button attached to it + + enablePropertiesButtonEachWindow(); }else{ CvBar* lastbar = (CvBar*) global_control_panel->myLayout->itemAt(global_control_panel->myLayout->count()-1); @@ -1279,7 +1294,6 @@ CvWinProperties::CvWinProperties(QString name_paraWindow, QWidget* parent) setContentsMargins(0,0,0,0); setWindowTitle(name_paraWindow); setObjectName(name_paraWindow); - //parameters_window->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); resize(100,50); myLayout = new QBoxLayout(QBoxLayout::TopToBottom); @@ -1364,34 +1378,31 @@ CvWindow::CvWindow(QString arg, int arg2) resize(400,300); - //1: Layouts + //1: create control panel + if (!global_control_panel) + global_control_panel = createParameterWindow(); + + //2: Layouts createBarLayout(); createGlobalLayout(); - //2: my view + //3: my view int mode_display = CV_MODE_NORMAL; #if defined( HAVE_QT_OPENGL ) mode_display = CV_MODE_OPENGL; #endif createView(mode_display, param_ratio_mode); - //3: shortcuts and actions - createActions(); - createShortcuts(); + //4: shortcuts and actions + createActionsandShortcuts(); - //4: toolBar and statusbar + //5: toolBar and statusbar if (param_gui_mode == CV_GUI_EXPANDED) { createToolBar(); createStatusBar(); } - //5: create control panel - if (!global_control_panel) - global_control_panel = createParameterWindow(); - - parameters_window = global_control_panel; - //Now attach everything if (myToolBar) @@ -1406,6 +1417,7 @@ CvWindow::CvWindow(QString arg, int arg2) setLayout(myGlobalLayout); show(); + } CvWindow::~CvWindow() @@ -1475,8 +1487,8 @@ void CvWindow::hideTools() if (myStatusBar) myStatusBar->hide(); - if (parameters_window) - parameters_window->hide(); + if (global_control_panel) + global_control_panel->hide(); } void CvWindow::showTools() @@ -1487,8 +1499,6 @@ void CvWindow::showTools() if (myStatusBar) myStatusBar->show(); - //if (parameters_window) - // parameters_window->show(); } CvWinProperties* CvWindow::createParameterWindow() @@ -1501,58 +1511,73 @@ CvWinProperties* CvWindow::createParameterWindow() void CvWindow::displayPropertiesWin() { - if (parameters_window->isHidden()) - parameters_window->show(); + if (global_control_panel->isHidden()) + global_control_panel->show(); else - parameters_window->hide(); + global_control_panel->hide(); } -void CvWindow::createActions() +void CvWindow::createActionsandShortcuts() { vect_QActions.resize(10); //if the shortcuts are changed in window_QT.h, we need to update the tooltip manually vect_QActions[0] = new QAction(QIcon(":/left-icon"),"Panning left (CTRL+arrowLEFT)",this); vect_QActions[0]->setIconVisibleInMenu(true); + vect_QActions[0]->setShortcut(shortcut_panning_left); QObject::connect( vect_QActions[0],SIGNAL(triggered()),myview, SLOT( siftWindowOnLeft() )); vect_QActions[1] = new QAction(QIcon(":/right-icon"),"Panning right (CTRL+arrowRIGHT)",this); vect_QActions[1]->setIconVisibleInMenu(true); + vect_QActions[1]->setShortcut(shortcut_panning_right); QObject::connect( vect_QActions[1],SIGNAL(triggered()),myview, SLOT( siftWindowOnRight() )); vect_QActions[2] = new QAction(QIcon(":/up-icon"),"Panning up (CTRL+arrowUP)",this); vect_QActions[2]->setIconVisibleInMenu(true); + vect_QActions[2]->setShortcut(shortcut_panning_up); QObject::connect( vect_QActions[2],SIGNAL(triggered()),myview, SLOT( siftWindowOnUp() )); vect_QActions[3] = new QAction(QIcon(":/down-icon"),"Panning down (CTRL+arrowDOWN)",this); vect_QActions[3]->setIconVisibleInMenu(true); + vect_QActions[3]->setShortcut(shortcut_panning_down); QObject::connect( vect_QActions[3],SIGNAL(triggered()),myview, SLOT( siftWindowOnDown() )); - vect_QActions[4] = new QAction(QIcon(":/zoom_x1-icon"),"Zoom x1 (CTRL+P)",this); + vect_QActions[4] = new QAction(QIcon(":/zoom_x1-icon"),"Zoom x1 (CTRL+Z)",this); vect_QActions[4]->setIconVisibleInMenu(true); + vect_QActions[4]->setShortcut(shortcut_zoom_normal); QObject::connect( vect_QActions[4],SIGNAL(triggered()),myview, SLOT( resetZoom() )); vect_QActions[5] = new QAction(QIcon(":/imgRegion-icon"),tr("Zoom x%1 (see label) (CTRL+X)") .arg(threshold_zoom_img_region) ,this); vect_QActions[5]->setIconVisibleInMenu(true); + vect_QActions[5]->setShortcut(shortcut_zoom_imgRegion); QObject::connect( vect_QActions[5],SIGNAL(triggered()),myview, SLOT( imgRegion() )); vect_QActions[6] = new QAction(QIcon(":/zoom_in-icon"),tr("Zoom in (CTRL++)"),this); vect_QActions[6]->setIconVisibleInMenu(true); + vect_QActions[6]->setShortcut(shortcut_zoom_in); QObject::connect( vect_QActions[6],SIGNAL(triggered()),myview, SLOT( ZoomIn() )); vect_QActions[7] = new QAction(QIcon(":/zoom_out-icon"),tr("Zoom out (CTRL+-)"),this); vect_QActions[7]->setIconVisibleInMenu(true); + vect_QActions[7]->setShortcut(shortcut_zoom_out); QObject::connect( vect_QActions[7],SIGNAL(triggered()),myview, SLOT( ZoomOut() )); vect_QActions[8] = new QAction(QIcon(":/save-icon"),tr("Save current image (CTRL+S)"),this); vect_QActions[8]->setIconVisibleInMenu(true); + vect_QActions[8]->setShortcut(shortcut_save_img); QObject::connect( vect_QActions[8],SIGNAL(triggered()),myview, SLOT( saveView() )); vect_QActions[9] = new QAction(QIcon(":/properties-icon"),tr("Display properties window (CTRL+P)"),this); vect_QActions[9]->setIconVisibleInMenu(true); + vect_QActions[9]->setShortcut(shortcut_properties_win); + + if (global_control_panel->myLayout->count() == 0) + vect_QActions[9]->setDisabled(true); + QObject::connect( vect_QActions[9],SIGNAL(triggered()),this, SLOT( displayPropertiesWin() )); + } void CvWindow::createToolBar() @@ -1600,32 +1625,6 @@ void CvWindow::createBarLayout() myBarLayout->setMargin(0); } -void CvWindow::createShortcuts() -{ - vect_QShortcuts.resize(10); - - vect_QShortcuts[0] = new QShortcut(shortcut_panning_left, this); - QObject::connect( vect_QShortcuts[0], SIGNAL( activated ()),myview, SLOT( siftWindowOnLeft() )); - vect_QShortcuts[1] = new QShortcut(shortcut_panning_right, this); - QObject::connect( vect_QShortcuts[1], SIGNAL( activated ()),myview, SLOT( siftWindowOnRight() )); - vect_QShortcuts[2] = new QShortcut(shortcut_panning_up, this); - QObject::connect(vect_QShortcuts[2], SIGNAL( activated ()),myview, SLOT( siftWindowOnUp() )); - vect_QShortcuts[3] = new QShortcut(shortcut_panning_down, this); - QObject::connect(vect_QShortcuts[3], SIGNAL( activated ()),myview, SLOT( siftWindowOnDown() )); - - vect_QShortcuts[4] = new QShortcut(shortcut_zoom_normal, this); - QObject::connect( vect_QShortcuts[4], SIGNAL( activated ()),myview, SLOT( resetZoom( ) )); - vect_QShortcuts[5] = new QShortcut(shortcut_zoom_imgRegion, this); - QObject::connect( vect_QShortcuts[5], SIGNAL( activated ()),myview, SLOT( imgRegion( ) )); - vect_QShortcuts[6] = new QShortcut(shortcut_zoom_in, this); - QObject::connect( vect_QShortcuts[6], SIGNAL( activated ()),myview, SLOT( ZoomIn() )); - vect_QShortcuts[7] = new QShortcut(shortcut_zoom_out, this); - QObject::connect(vect_QShortcuts[7], SIGNAL( activated ()),myview, SLOT( ZoomOut() )); - vect_QShortcuts[8] = new QShortcut(shortcut_save_img, this); - QObject::connect( vect_QShortcuts[8], SIGNAL( activated ()),myview, SLOT( saveView( ) )); - vect_QShortcuts[9] = new QShortcut(shortcut_properties_win, this); - QObject::connect( vect_QShortcuts[9], SIGNAL( activated ()),this, SLOT( displayPropertiesWin() )); -} void CvWindow::createView(int mode, int ratio) { @@ -1674,10 +1673,18 @@ void CvWindow::addSlider(CvWindow* w,QString name, int* value, int count,CvTrack QPointer myLayout; if (w) + { myLayout = w->myBarLayout; + } else + { myLayout = global_control_panel->myLayout; + //if first one, enable control panel + if (myLayout->count() == 0) + guiMainThread->enablePropertiesButtonEachWindow(); + } + myLayout->insertLayout( myLayout->count(),t); @@ -2003,17 +2010,11 @@ ViewPort::ViewPort(CvWindow* arg, int arg2, int arg3) zmax = DEFAULT_ZMAX; initGL(); } -#else - setViewport(centralWidget); + #endif image2Draw_ipl=cvCreateImage(cvSize(viewport()->width(),viewport()->height()),IPL_DEPTH_8U,3); - //image2Draw_qt = QImage((uchar*) image2Draw_ipl->imageData, image2Draw_ipl->width, image2Draw_ipl->height,QImage::Format_RGB888); - //image2Draw_qt_resized = image2Draw_qt.scaled(this->width(),this->height(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation); - //setupViewport(viewport());//centralWidget - //setViewportUpdateMode(QGraphicsView::FullViewportUpdate); - nbChannelOriginImage = 0; cvZero(image2Draw_ipl); diff --git a/modules/highgui/src/window_QT.h b/modules/highgui/src/window_QT.h index a397e64a2d..9094d24fbe 100644 --- a/modules/highgui/src/window_QT.h +++ b/modules/highgui/src/window_QT.h @@ -144,6 +144,7 @@ public slots: void setOpenGLCallback(QString window_name, void* callbackOpenGL, void* userdata, double angle, double zmin, double zmax); void putText(void* arg1, QString text, QPoint org, void* font); void addButton(QString button_name, int button_type, int initial_button_state , void* on_change, void* userdata); + void enablePropertiesButtonEachWindow(); }; enum typeBar{type_CvTrackbar = 0, type_CvButtonbar = 1}; @@ -303,7 +304,6 @@ public: //parameters (will be save/load) QString param_name; - CvWinProperties* parameters_window ; int param_flags; int param_gui_mode; int param_ratio_mode; @@ -324,8 +324,7 @@ private: void icvLoadButtonbar(CvButtonbar* t,QSettings *settings); void icvSaveButtonbar(CvButtonbar* t,QSettings *settings); - void createShortcuts(); - void createActions(); + void createActionsandShortcuts(); void createToolBar(); void createView(int display_mode, int ratio_mode); void createStatusBar();