Нужно переопределить сигнал clicked и передать в него аргументы

Суть проста, не хочу городить два обработчика для кнопок у, которых по сути одно применение. Есть некоторое поле, слева и справа две мои кнопки. При нажатии на правую открывается модальное окно, при нажатие на левую тоже открывается модальное окно, разница лишь в тексте кнопок на модальном окне. Вот хотел бы просто передавать некоторый enum в кнопку, по которому потом и получал нужный текст в открывающемся модальном окне

Пишу свой собственный класс, наследующийся от QPushButton, нужно переопределить сигнал clicked и передать в него аргументы, как это сделать?


Ответы (1 шт):

Автор решения: Alexander Chernin

Можно (и лучше) создать свой сигнал, со своим именем (чтобы потом не заниматься приведением сигнала с нужным типом аргумента):

class MyButton : public QPushButton {
    Q_OBJECT
private:
    EnumType type;
public:
    MyButton(EnumType type, QWidget* parent =nullptr) : QPushButton(parent), type(type) {
        connect(this, &QPushButton::clicked, [&]() {
            emit myClicked(type);
        });
    }

signals:
    void myClicked(EnumType value);
}

И далее, где-то в коде:

connect(myButton /*указатель*/, &MyButton::myClicked, /*получатель сигнала с аргументом*/);
→ Ссылка