官方文档: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_OBJECTpublic: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" ------------>