web-dev-qa-db-fra.com

Comment obtenir un widget expéditeur avec un mécanisme signal / slot?

Il est possible de lier plus d'un signal à un emplacement (n'est-ce pas?). Alors, existe-t-il un moyen de comprendre quel widget envoie le signal? Je cherche quelque chose comme sender argument d'événements dans .NET

54
sorush-r

QObject::sender() fera le travail.

76
Idan K

Utilisez QObject::sender() dans l'emplacement, comme dans l'exemple suivant:

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 ) 
   { 
      ...
   }

}
114
Teh Suu

Oui, vous pouvez connecter plusieurs signaux à un emplacement. Dans ce cas, vous utiliserez QSignalMapper pour différencier les sources des signaux. Cette solution est limitée aux signaux sans paramètres. Vous pouvez voir un exemple ici .

5
Arnold Spence