From e4cf3297c7604cffba8dca79c16111a1e58a72e9 Mon Sep 17 00:00:00 2001 From: Pavel Rojtberg Date: Wed, 17 Aug 2016 14:29:28 +0200 Subject: [PATCH] highgui: allow specifying that a button should create a new buttonbar --- modules/highgui/include/opencv2/highgui.hpp | 11 +++++++---- modules/highgui/src/window_QT.cpp | 7 ++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/modules/highgui/include/opencv2/highgui.hpp b/modules/highgui/include/opencv2/highgui.hpp index 7f963a5cdf..b5c22a19ee 100644 --- a/modules/highgui/include/opencv2/highgui.hpp +++ b/modules/highgui/include/opencv2/highgui.hpp @@ -239,9 +239,10 @@ enum QtFontStyles { //! Qt "button" type enum QtButtonTypes { - QT_PUSH_BUTTON = 0, //!< Push button. - QT_CHECKBOX = 1, //!< Checkbox button. - QT_RADIOBOX = 2 //!< Radiobox button. + QT_PUSH_BUTTON = 0, //!< Push button. + QT_CHECKBOX = 1, //!< Checkbox button. + QT_RADIOBOX = 2, //!< Radiobox button. + QT_NEW_BUTTONBAR = 1024 //!< Button should create a new buttonbar }; /** @brief Callback function for mouse events. see cv::setMouseCallback @@ -719,7 +720,8 @@ CV_EXPORTS void stopLoop(); The function createButton attaches a button to the control panel. Each button is added to a buttonbar to the right of the last button. A new buttonbar is created if nothing was attached to the -control panel before, or if the last element attached to the control panel was a trackbar. +control panel before, or if the last element attached to the control panel was a trackbar or if the +QT_NEW_BUTTONBAR flag is added to the type. See below various examples of the cv::createButton function call: : @code @@ -728,6 +730,7 @@ See below various examples of the cv::createButton function call: : createButton("button3",callbackButton,&value); createButton("button5",callbackButton1,NULL,QT_RADIOBOX); createButton("button6",callbackButton2,NULL,QT_PUSH_BUTTON,1); + createButton("button6",callbackButton2,NULL,QT_PUSH_BUTTON|QT_NEW_BUTTONBAR);// create a push button in a new row @endcode @param bar_name Name of the button. diff --git a/modules/highgui/src/window_QT.cpp b/modules/highgui/src/window_QT.cpp index 7388a44b8d..92c4ce1d6f 100644 --- a/modules/highgui/src/window_QT.cpp +++ b/modules/highgui/src/window_QT.cpp @@ -1139,13 +1139,18 @@ void GuiReceiver::addButton(QString button_name, int button_type, int initial_bu { CvBar* lastbar = (CvBar*) global_control_panel->myLayout->itemAt(global_control_panel->myLayout->count() - 1); - if (lastbar->type == type_CvTrackbar) //if last bar is a trackbar, create a new buttonbar, else, attach to the current bar + // if last bar is a trackbar or the user requests a new buttonbar, create a new buttonbar + // else, attach to the current bar + if (lastbar->type == type_CvTrackbar || cv::QT_NEW_BUTTONBAR & button_type) b = CvWindow::createButtonBar(button_name); //the bar has the name of the first button attached to it else b = (CvButtonbar*) lastbar; } + // unset buttonbar flag + button_type = button_type & ~cv::QT_NEW_BUTTONBAR; + b->addButton(button_name, (CvButtonCallback) on_change, userdata, button_type, initial_button_state); }