Подтвердить что ты не робот

Как получить виджет отправителя с механизмом сигнала/слота?

Возможно ли связывать более одного сигнала с одним слотом (не?). Итак, есть ли способ понять, какой виджет посылает сигнал? Я ищу что-то вроде аргумента sender событий в .NET

4b9b3361

Ответ 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, чтобы различать источники сигналов. Это решение ограничено безпараметрическими сигналами. Вы можете увидеть пример здесь.