如何使用信号/槽机制获取发送者小部件?
Posted
技术标签:
【中文标题】如何使用信号/槽机制获取发送者小部件?【英文标题】:How to get sender widget with a signal/slot mechanism? 【发布时间】:2010-10-28 20:18:23 【问题描述】:可以将多个信号绑定到一个插槽(不是吗?)。那么,有没有办法了解哪个小部件发送信号?我正在寻找类似sender
.NET 中事件的参数
【问题讨论】:
【参考方案1】:在槽中使用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 )
...
【讨论】:
qobject_cast 不是比普通的 dynamic_cast 更好吗? @elephant 是的,如doc.qt.io/qt-4.8/metaobjects.html 所述。这应该在答案中得到改进。【参考方案2】:QObject::sender()
将完成这项工作。
【讨论】:
【参考方案3】:是的,您可以将多个信号连接到一个插槽。在这种情况下,您将使用QSignalMapper
来区分信号源。此解决方案仅限于无参数信号。你可以看一个例子here。
【讨论】:
以上是关于如何使用信号/槽机制获取发送者小部件?的主要内容,如果未能解决你的问题,请参考以下文章