Qt 利用QSignalMapper区分按钮点击

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

猜你喜欢

转载自blog.csdn.net/hp_cpp/article/details/80265374
今日推荐