如何使用信号/槽机制获取发送者小部件?

71
可以将多个信号绑定到一个槽(是吧?)。那么,有没有办法知道是哪个小部件发送了信号呢?我在寻找类似于.NET中事件的sender参数的东西。
3个回答

144
在槽函数中使用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
Qobject_cast比普通的dynamic_cast更好吗? - elephant
1
@elephant 是的,就像 http://doc.qt.io/qt-4.8/metaobjects.html 上所描述的那样。这个答案应该得到改进。 - Johannes

94

8

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接