Здравствуйте!
У меня есть много кнопок и не хочется под каждую делать свой обработчик нажатия... Тем более, что по нажатию этих кнопок выполняются схожие действия. Поэтому сделал один общий слот и подключил к нему сигналы кнопок, примерно так это выглядит:
QObject::connect(ui->button1, &QPushButton::clicked, this, &MainWindow::buttonClicked); QObject::connect(ui->button2, &QPushButton::clicked, this, &MainWindow::buttonClicked); QObject::connect(ui->button3, &QPushButton::clicked, this, &MainWindow::buttonClicked); // ...
Вопрос - можно ли (и как) внутри слота buttonClicked() определить программно, какая именно кнопка была нажата и в зависимости от этого выбрать нужные действия?
Добрый день, можно через QObject::sender():
void MainWindow::buttonClicked() { QPushButton *sender = dynamic_cast<QPushButton*>(QObject::sender()); if (sender != nullptr) { if (sender == ui->button1) { // Do something } } }
Лучше qobject_cast использовать:
QPushButton *sender = qobject_cast<QPushButton*>(QObject::sender());
Лучше qobject_cast использовать:
QPushButton *sender = qobject_cast<QPushButton*>(QObject::sender());
да, действительно, поправлю у себя заодно в проекте )))