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