官方文档:http://doc.qt.io/qt-5/qsignalmapper.html
参考: https://blog.csdn.net/nirendao/article/details/51607115
QSignalMapper 它可以把一个无参数的信号翻译成带int参数、QString参数、QObject参数或者QWidget参数的信号,在具体的项目中我们可以根据需要进行相应的转换。用例子来说明比较直观:
一个基于Widget的QT工程,头文件:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
public slots:
void handleBtn(QString text);
};
#endif // WIDGET_H
实现文件:
#include "widget.h"
#include <QSignalMapper>
#include <QPushButton>
#include <QDebug>
#include <QGridLayout>
#include <QList>
#include <QString>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QList<QString> texts;
texts.append("button1");
texts.append("button2");
QSignalMapper *signalMapper = new QSignalMapper(this);
QGridLayout *gridLayout = new QGridLayout;
for (int i = 0; i < texts.size(); ++i) {
QPushButton *button = new QPushButton(texts[i]);
signalMapper->setMapping(button, texts[i]);
connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
gridLayout->addWidget(button, i / 3, i % 3);
}
connect(signalMapper, SIGNAL(mapped(QString)), this, SLOT(handleBtn(QString)));
setLayout(gridLayout);
}
void Widget::handleBtn(QString text)
{
qDebug() << "cliked button is " << text << " ------------>";
}
Widget::~Widget()
{
}
运行效果:
点击按钮,在输出窗口可以看到:
cliked button is "button1" ------------>
cliked button is "button2" ------------>
新版的Qt推荐使用Lambda