【发布时间】:2014-07-02 23:07:26
【问题描述】:
使用Qt 4.8,我以编程方式创建了许多输入小部件(QSpinBox、QSlider)。 最后,我希望有一个方法来处理任何这些输入小部件的更改,最好是通过索引。
但是,这些小部件只有一个带参数的信号,例如valueChanged(int)。
这与QSignalMapper() 的插槽map() 不兼容。
正如 cmets 中指出的那样,连接确实有效!
connect( spinbox, SIGNAL( valueChanged(int) ),
signalMapper, SLOT( map() )
);
现在我只需要获取值,但这不能再通过 sender() 方法完成,因为现在是 SignalMapper。
原始问题:
除了(重新)使用附加参数实现QSignalMapper 或为小部件使用无参数valueChanged() 或使用objectName 和QObject::sender() 以使插槽查看哪个元素更改(和获取新值)?
【问题讨论】:
-
你不能只在监听映射器的槽中查询新值吗(你可以用比槽需要更多的参数发出信号)
-
你不需要重新实现
QSignalMapper。只需创建QSignalMapper的实例并为其定义映射。它支持各种数据类型的映射,因此您可以定义整数、字符串,甚至任何转换为QObject*的东西。您还希望在广告位中提供哪些其他信息? -
请参阅:stackoverflow.com/questions/24260394/how-works-qsignalmapper,了解如何正确使用
QSignalMapper。这确实是您需要做的最好的解决方案。 -
@Googie 是的,我不介意使用 QSignalMapper,但是我的小部件没有与您发布的示例解决方案中使用的 clicked() 方法等效的方法。或者我还是不明白 - 你能在答案中发布一个例子吗?
标签: c++ qt signals-slots