обработка событий мыши на Qt C++
Всем привет! Помогите, пожалуйста разобраться. Пишу простой калькулятор на Qt C++. Форму сделал. Теперь надо обработать события кнопок. Например, когда нажимаю на кнопку '1', чтобы это число отображалось на экране. Сначала подумал сделать сигнально-слотовое соединение для каждой кнопки, но подумал, что это плохое решение; вдруг у меня в какой-то программе кнопок будет очень много. И решил написать один метод в котором будут обрабатываться события в зависимости от нажатой кнопки, но никак не могу разобраться, как уловить определенную кнопки и обработать для него событие. Подскажите, кто знает
Ответы (1 шт):
В официальной документации есть хороший пример реализации калькулятора, код которого отвечает на ваш вопрос. (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));
}