+#include <QMouseEvent>
+#include <QApplication>
+
+namespace
+{
+ class RadioButton: public QRadioButton
+ {
+ QWidget* myBuddy;
+ public:
+ RadioButton(const QString& text, QWidget* buddy = nullptr, QWidget* parent = nullptr):
+ QRadioButton(text, parent), myBuddy(buddy)
+ {
+ if (buddy != nullptr)
+ {
+ buddy->setEnabled(isEnabled());
+ buddy->installEventFilter(this);
+ }
+ }
+ RadioButton(QWidget* buddy = nullptr, QWidget* parent = nullptr):
+ RadioButton(QString(), buddy, parent) {}
+
+ bool eventFilter(QObject* sender, QEvent* event)
+ {
+ if (myBuddy != nullptr && sender == myBuddy && event->type() == QEvent::MouseButtonPress)
+ setChecked(true);
+ return QRadioButton::eventFilter(sender, event);
+ }
+
+ void changeEvent(QEvent* event)
+ {
+ if (myBuddy != nullptr && event->type() == QEvent::EnabledChange)
+ myBuddy->setEnabled(isEnabled());
+ QRadioButton::changeEvent(event);
+ }
+ };
+}