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

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

Ответы [ 3 ]

112 голосов
/ 13 сентября 2013

Используйте 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 ) 
   { 
      ...
   }

}
74 голосов
/ 29 октября 2010

QObject::sender() выполнят эту работу.

5 голосов
/ 29 октября 2010

Да, вы можете подключить несколько сигналов к одному слоту.В этом случае вы должны использовать QSignalMapper для дифференциации источников сигналов.Это решение ограничено беспараметрическими сигналами.Вы можете увидеть пример здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...