обработка событий мыши на Qt C++

Всем привет! Помогите, пожалуйста разобраться. Пишу простой калькулятор на Qt C++. Форму сделал. Теперь надо обработать события кнопок. Например, когда нажимаю на кнопку '1', чтобы это число отображалось на экране. Сначала подумал сделать сигнально-слотовое соединение для каждой кнопки, но подумал, что это плохое решение; вдруг у меня в какой-то программе кнопок будет очень много. И решил написать один метод в котором будут обрабатываться события в зависимости от нажатой кнопки, но никак не могу разобраться, как уловить определенную кнопки и обработать для него событие. Подскажите, кто знает


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

Автор решения: Rafael F.

В официальной документации есть хороший пример реализации калькулятора, код которого отвечает на ваш вопрос. (https://doc.qt.io/qt-6/qtwidgets-widgets-calculator-example.html)

Выдержки из кода:

Метод создания кнопки

Button *Calculator::createButton(const QString &text, const char *member)
{
    Button *button = new Button(text);
    connect(button, SIGNAL(clicked()), this, member);
    return button;
}

Создание массива кнопок

for (int i = 0; i < NumDigitButtons; ++i)
        digitButtons[i] = createButton(QString::number(i), SLOT(digitClicked()));

Добавление кнопок в gui

for (int i = 1; i < NumDigitButtons; ++i) {
        int row = ((9 - i) / 3) + 2;
        int column = ((i - 1) % 3) + 1;
        mainLayout->addWidget(digitButtons[i], row, column);
    }

 Обработка нажатий

void Calculator::digitClicked()
{
    Button *clickedButton = qobject_cast<Button *>(sender());
    int digitValue = clickedButton->text().toInt();
    if (display->text() == "0" && digitValue == 0.0)
        return;

    if (waitingForOperand) {
        display->clear();
        waitingForOperand = false;
    }
    display->setText(display->text() + QString::number(digitValue));
}
→ Ссылка