如何使用信号/插槽机制获取发件人窗口小部件?

时间:2010-10-28 20:18:23

标签: qt4

可以将多个信号绑定到一个插槽(不是?)。那么,有没有办法了解哪个小部件发送信号?我正在寻找类似sender .NET事件参数的东西

3 个答案:

答案 0 :(得分:110)

在插槽中使用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 ) 
   { 
      ...
   }

}

答案 1 :(得分:74)

QObject::sender()将完成这项工作。

答案 2 :(得分:5)

是的,您可以将多个信号连接到一个插槽。在这种情况下,您可以使用QSignalMapper来区分信号的来源。该解决方案仅限于无参数信号。您可以看到示例here