Add QButtonGroup::idClicked/Pressed/Released/Toggled signals

Following the deprecation of the signal overloads, the remaining signals
did not provide equivalent functionality for connecting a slot expecting
an integer. The mapping from QAbstractButton* to the ID is comparatively
cumbersome to do in the connected slot.

Add uniquely named signals that emit the ID of the button directly.

[ChangeLog][QtWidgets][QButtonGroup] Added signals
idClicked/Pressed/Released/Toggled that replace the deprecated signal
overloads.

Change-Id: I77215e4f815c4fb7dd6326e1f431230e6601e8f8
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
Volker Hilsheimer 2020-04-15 11:14:22 +02:00
parent c61b81c385
commit e38e1d02cc
4 changed files with 67 additions and 12 deletions

View File

@ -415,13 +415,16 @@ void QAbstractButtonPrivate::emitClicked()
emit q->clicked(checked);
#if QT_CONFIG(buttongroup)
if (guard && group) {
const int id = group->id(q);
emit group->idClicked(id);
#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
emit group->buttonClicked(group->id(q));
if (guard && group)
emit group->buttonClicked(id);
QT_WARNING_POP
#endif
if (guard && group)
emit group->buttonClicked(q);
}
#endif
@ -434,13 +437,16 @@ void QAbstractButtonPrivate::emitPressed()
emit q->pressed();
#if QT_CONFIG(buttongroup)
if (guard && group) {
const int id = group->id(q);
emit group->idPressed(id);
#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
emit group->buttonPressed(group->id(q));
if (guard && group)
emit group->buttonPressed(id);
QT_WARNING_POP
#endif
if (guard && group)
emit group->buttonPressed(q);
}
#endif
@ -453,13 +459,16 @@ void QAbstractButtonPrivate::emitReleased()
emit q->released();
#if QT_CONFIG(buttongroup)
if (guard && group) {
const int id = group->id(q);
emit group->idReleased(id);
#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
emit group->buttonReleased(group->id(q));
if (guard && group)
emit group->buttonReleased(id);
QT_WARNING_POP
#endif
if (guard && group)
emit group->buttonReleased(q);
}
#endif
@ -472,13 +481,16 @@ void QAbstractButtonPrivate::emitToggled(bool checked)
emit q->toggled(checked);
#if QT_CONFIG(buttongroup)
if (guard && group) {
const int id = group->id(q);
emit group->idToggled(id, checked);
#if QT_DEPRECATED_SINCE(5, 15)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
emit group->buttonToggled(group->id(q), checked);
if (guard && group)
emit group->buttonToggled(id, checked);
QT_WARNING_POP
#endif
if (guard && group)
emit group->buttonToggled(q, checked);
}
#endif

View File

@ -172,6 +172,16 @@ void QButtonGroup::setExclusive(bool exclusive)
\sa checkedButton(), QAbstractButton::clicked()
*/
/*!
\fn void QButtonGroup::idClicked(int id)
\since 5.15
This signal is emitted when a button with the given \a id is
clicked.
\sa checkedButton(), QAbstractButton::clicked()
*/
/*!
\fn void QButtonGroup::buttonPressed(QAbstractButton *button)
\since 4.2
@ -192,6 +202,16 @@ void QButtonGroup::setExclusive(bool exclusive)
\sa QAbstractButton::pressed()
*/
/*!
\fn void QButtonGroup::idPressed(int id)
\since 5.15
This signal is emitted when a button with the given \a id is
pressed down.
\sa QAbstractButton::pressed()
*/
/*!
\fn void QButtonGroup::buttonReleased(QAbstractButton *button)
\since 4.2
@ -212,6 +232,16 @@ void QButtonGroup::setExclusive(bool exclusive)
\sa QAbstractButton::released()
*/
/*!
\fn void QButtonGroup::idReleased(int id)
\since 5.15
This signal is emitted when a button with the given \a id is
released.
\sa QAbstractButton::released()
*/
/*!
\fn void QButtonGroup::buttonToggled(QAbstractButton *button, bool checked)
\since 5.2
@ -233,6 +263,15 @@ void QButtonGroup::setExclusive(bool exclusive)
\sa QAbstractButton::toggled()
*/
/*!
\fn void QButtonGroup::idToggled(int id, bool checked)
\since 5.15
This signal is emitted when a button with the given \a id is toggled.
\a checked is true if the button is checked, or false if the button is unchecked.
\sa QAbstractButton::toggled()
*/
/*!
Adds the given \a button to the button group. If \a id is -1,

View File

@ -81,14 +81,18 @@ Q_SIGNALS:
void buttonPressed(QAbstractButton *);
void buttonReleased(QAbstractButton *);
void buttonToggled(QAbstractButton *, bool);
void idClicked(int);
void idPressed(int);
void idReleased(int);
void idToggled(int, bool);
#if QT_DEPRECATED_SINCE(5, 15)
QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::buttonClicked(QAbstractButton *) instead")
QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::idClicked(int) instead")
void buttonClicked(int);
QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::buttonPressed(QAbstractButton *) instead")
QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::idPressed(int) instead")
void buttonPressed(int);
QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::buttonReleased(QAbstractButton *) instead")
QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::idReleased(int) instead")
void buttonReleased(int);
QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::buttonToggled(QAbstractButton *, bool) instead")
QT_DEPRECATED_VERSION_X_5_15("Use QButtonGroup::idToggled(int, bool) instead")
void buttonToggled(int, bool);
#endif

View File

@ -365,11 +365,11 @@ void tst_QButtonGroup::testSignals()
qRegisterMetaType<QAbstractButton *>("QAbstractButton *");
QSignalSpy clickedSpy(&buttons, SIGNAL(buttonClicked(QAbstractButton*)));
QSignalSpy clickedIdSpy(&buttons, SIGNAL(buttonClicked(int)));
QSignalSpy clickedIdSpy(&buttons, SIGNAL(idClicked(int)));
QSignalSpy pressedSpy(&buttons, SIGNAL(buttonPressed(QAbstractButton*)));
QSignalSpy pressedIdSpy(&buttons, SIGNAL(buttonPressed(int)));
QSignalSpy pressedIdSpy(&buttons, SIGNAL(idPressed(int)));
QSignalSpy releasedSpy(&buttons, SIGNAL(buttonReleased(QAbstractButton*)));
QSignalSpy releasedIdSpy(&buttons, SIGNAL(buttonReleased(int)));
QSignalSpy releasedIdSpy(&buttons, SIGNAL(idReleased(int)));
pb1.animateClick();
QTestEventLoop::instance().enterLoop(1);
@ -409,7 +409,7 @@ void tst_QButtonGroup::testSignals()
QSignalSpy toggledSpy(&buttons, SIGNAL(buttonToggled(QAbstractButton*, bool)));
QSignalSpy toggledIdSpy(&buttons, SIGNAL(buttonToggled(int, bool)));
QSignalSpy toggledIdSpy(&buttons, SIGNAL(idToggled(int, bool)));
pb1.setCheckable(true);
pb2.setCheckable(true);