Top.Mail.Ru
Уведомления
Очистить все

Узнать отправителя сигнала из слота (qt signal-slot)

(@andrey178)
New member

Здравствуйте!

У меня есть много кнопок и не хочется под каждую делать свой обработчик нажатия... Тем более, что по нажатию этих кнопок выполняются схожие действия. Поэтому сделал один общий слот и подключил к нему сигналы кнопок, примерно так это выглядит:

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() определить программно, какая именно кнопка была нажата и в зависимости от этого выбрать нужные действия?

Цитата
Создатель темы Размещено : 30.01.2025 11:26
TQFP
 TQFP
(@tqfp)
Level 5

Добрый день, можно через QObject::sender():

void MainWindow::buttonClicked()
{
    QPushButton *sender = dynamic_cast<QPushButton*>(QObject::sender());
    if (sender != nullptr)
    {
        if (sender == ui->button1)
        {
            // Do something
        }
    }
}

 

ОтветитьЦитата
Размещено : 30.01.2025 13:44
(@andrey178)
New member

@tqfp спасибо за ответ, буду пробовать

ОтветитьЦитата
Создатель темы Размещено : 30.01.2025 14:26
Aveal
(@aveal)
Top level Admin

Лучше qobject_cast использовать:

QPushButton *sender = qobject_cast<QPushButton*>(QObject::sender());
ОтветитьЦитата
Размещено : 30.01.2025 18:30
TQFP
 TQFP
(@tqfp)
Level 5

Запись от: @aveal

Лучше qobject_cast использовать:

QPushButton *sender = qobject_cast<QPushButton*>(QObject::sender());

да, действительно, поправлю у себя заодно в проекте )))

 

ОтветитьЦитата
Размещено : 30.01.2025 19:08
Поделиться: