在Qt5中使用QSignalMapper的时候会收到警告“QSignalMapper is deprecated”。QSignalMapper的存在只是为了兼容老版本,在将来的版本中随时会被移除源码。
我们先看看QSignalMapper的功能。
QSignalMapper用于绑定不同sender的相同signal,这个在某些应用场景下非常实用。比如工控界面上包含了大量的工控按钮,通常的方法是将每个按钮的clicked()信号链接到它自己的槽。如果使用QSignalMapper,可以将所有按钮的信号连接到同一个槽(QSignalMapper::map()),然后调用QSignalMapper的setMapping方法将sender和字符串(也可以是整型)映射。这样当按钮点击时,QSignalMapper就会发送一个带字符串或整型参数的信号mapped,此时可以将mapped绑定到指定的槽,在槽中进行下一步操作。setMapping所形成的映射关系可以通过removeMappings移除。
一个例子:
BottonWidget.h
#ifndef BUTTONWIDGET_H
#define BUTTONWIDGET_H
#include <QWidget>
#include <QSignalMapper>
#include <QLineEdit>
class ButtonWidget : public QWidget
{
Q_OBJECT
public:
ButtonWidget(const QStringList &texts, QWidget *pare