70 votes

Comment obtenir le widget de l'expéditeur avec un mécanisme de signal/slot ?

Il est possible de lier plus d'un signal à un slot (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 en .NET

143voto

Teh Suu Points 1541

Utilisez QObject::sender() dans la fente, 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 ) 
   { 
      ...
   }

}

93voto

Idan K Points 10037

QObject::sender() fera l'affaire.

8voto

Arnold Spence Points 12759

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X