Возможно ли связывать более одного сигнала с одним слотом (не?). Итак, есть ли способ понять, какой виджет посылает сигнал? Я ищу что-то вроде аргумента sender
событий в .NET
Как получить виджет отправителя с механизмом сигнала/слота?
Ответ 1
QObject::sender()
выполнит эту работу.
Ответ 2
Используйте QObject::sender()
в слоте, как в следующем примере:
void MainWindow::someSetupFunction( void )
{
...
connect( _foobarButton, SIGNAL(clicked()), this, SLOT(buttonPressedSlot()) );
}
void MainWindow::buttonPressedSlot()
{
// e.g. check with member variable _foobarButton
QObject* obj = sender();
if( obj == _foobarButton )
{
...
}
// e.g. casting to the class you know its connected with
QPushButton* button = qobject_cast<QPushButton*>(sender());
if( button != NULL )
{
...
}
}
Ответ 3
Да, вы можете подключить несколько сигналов к одному слоту. В этом случае вы должны использовать QSignalMapper
, чтобы различать источники сигналов. Это решение ограничено безпараметрическими сигналами. Вы можете увидеть пример здесь.