aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickbuttongroup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quicktemplates2/qquickbuttongroup.cpp')
-rw-r--r--src/quicktemplates2/qquickbuttongroup.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/quicktemplates2/qquickbuttongroup.cpp b/src/quicktemplates2/qquickbuttongroup.cpp
index 6ed75a2b..89941c19 100644
--- a/src/quicktemplates2/qquickbuttongroup.cpp
+++ b/src/quicktemplates2/qquickbuttongroup.cpp
@@ -123,6 +123,32 @@ QT_BEGIN_NAMESPACE
\sa RadioButton, {Button Controls}
*/
+/*!
+ \qmlsignal QtQuick.Controls::ButtonGroup::clicked(AbstractButton button)
+ \since QtQuick.Controls 2.1
+
+ This signal is emitted when a \a button in the group has been clicked.
+
+ This signal is convenient for implementing a common signal handler for
+ all buttons in the same group.
+
+ \code
+ ButtonGroup {
+ buttons: column.children
+ onClicked: console.log("clicked:", button.text)
+ }
+
+ Column {
+ id: column
+ Button { text: "First" }
+ Button { text: "Second" }
+ Button { text: "Third" }
+ }
+ \endcode
+
+ \sa AbstractButton::clicked()
+*/
+
class QQuickButtonGroupPrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QQuickButtonGroup)
@@ -131,6 +157,7 @@ public:
QQuickButtonGroupPrivate() : checkedButton(nullptr) { }
void clear();
+ void buttonClicked();
void _q_updateCurrent();
static void buttons_append(QQmlListProperty<QQuickAbstractButton> *prop, QQuickAbstractButton *obj);
@@ -146,11 +173,20 @@ void QQuickButtonGroupPrivate::clear()
{
for (QQuickAbstractButton *button : qAsConst(buttons)) {
QQuickAbstractButtonPrivate::get(button)->group = nullptr;
+ QObjectPrivate::disconnect(button, &QQuickAbstractButton::clicked, this, &QQuickButtonGroupPrivate::buttonClicked);
QObjectPrivate::disconnect(button, &QQuickAbstractButton::checkedChanged, this, &QQuickButtonGroupPrivate::_q_updateCurrent);
}
buttons.clear();
}
+void QQuickButtonGroupPrivate::buttonClicked()
+{
+ Q_Q(QQuickButtonGroup);
+ QQuickAbstractButton *button = qobject_cast<QQuickAbstractButton*>(q->sender());
+ if (button)
+ emit q->clicked(button);
+}
+
void QQuickButtonGroupPrivate::_q_updateCurrent()
{
Q_Q(QQuickButtonGroup);
@@ -289,6 +325,7 @@ void QQuickButtonGroup::addButton(QQuickAbstractButton *button)
return;
QQuickAbstractButtonPrivate::get(button)->group = this;
+ QObjectPrivate::connect(button, &QQuickAbstractButton::clicked, d, &QQuickButtonGroupPrivate::buttonClicked);
QObjectPrivate::connect(button, &QQuickAbstractButton::checkedChanged, d, &QQuickButtonGroupPrivate::_q_updateCurrent);
if (button->isChecked())
@@ -316,6 +353,7 @@ void QQuickButtonGroup::removeButton(QQuickAbstractButton *button)
return;
QQuickAbstractButtonPrivate::get(button)->group = nullptr;
+ QObjectPrivate::disconnect(button, &QQuickAbstractButton::clicked, d, &QQuickButtonGroupPrivate::buttonClicked);
QObjectPrivate::disconnect(button, &QQuickAbstractButton::checkedChanged, d, &QQuickButtonGroupPrivate::_q_updateCurrent);
if (d->checkedButton == button)