web-dev-qa-db-ja.com

シグナル/スロットメカニズムで送信者ウィジェットを取得する方法は?

1つのスロットに複数の信号をバインドすることは可能です(そうではありませんか?)。だから、どのウィジェットが信号を送信するかを理解する方法はありますか? .NETのイベントのsender引数のようなものを探しています

54
sorush-r

QObject::sender() はジョブを実行します。

76
Idan K

次の例のように、スロットで 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 ) 
   { 
      ...
   }

}
114
Teh Suu

はい、1つのスロットに複数の信号を接続できます。この場合、QSignalMapperを使用して、信号のソースを区別します。このソリューションは、パラメータのない信号に制限されています。あなたは例を見ることができます here

5
Arnold Spence