Qt 如何在不声明32个插槽的情况下将32个按钮的pressed()信号连接到单个函数?

Qt 如何在不声明32个插槽的情况下将32个按钮的pressed()信号连接到单个函数?,qt,Qt,我有一个小部件,里面有32个按钮。我需要将每个按钮的pressed()信号连接到一个插槽,以便调用一个函数,该函数的参数取决于我按下的按钮。现在我以onqpushButtonname_pressed()的形式添加了32个插槽 但那是很多插槽。我想知道是否有另一种更小的方法。我也做过类似的事情,但我正在使用自定义小部件,因此我可以在类的代码中创建一个新的信号,但我希望避免仅为一个按钮创建自定义小部件。使用QSignalMapper类。文档--有一个与您想要的非常接近的示例。另一种可能性:只创建一个

我有一个小部件,里面有32个按钮。我需要将每个按钮的pressed()信号连接到一个插槽,以便调用一个函数,该函数的参数取决于我按下的按钮。现在我以onqpushButtonname_pressed()的形式添加了32个插槽
但那是很多插槽。我想知道是否有另一种更小的方法。我也做过类似的事情,但我正在使用自定义小部件,因此我可以在类的代码中创建一个新的信号,但我希望避免仅为一个按钮创建自定义小部件。

使用QSignalMapper类。文档--有一个与您想要的非常接近的示例。

另一种可能性:只创建一个插槽,调用
sender()
并打开结果


正如Rohan提到的,QSignalMapper是推荐的解决方案,因为sender()有点像黑客。它的优点是更易于使用。

QSignalMapper是围绕sender构建的,因此如果您使用它,您可以确信,如果sender改变行为,Qt开发人员会考虑它。
sender()
是一个更好的解决方案
QSignalMapper
是overcomplex,并为此用例添加了零功能。在对话框中,首先,
QObject*qo=sender()后跟
switch(qo)
if(qo==my\u小部件)