QT多个按钮信号绑定一个槽函数,执行不同业务逻辑。
转载博客
参考博客
注意使用QSignalMapper推荐使用QT4的信号和槽连接。我在QT版本4.5.1社区版使用QT5信号和槽连接有报错
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
#include <QSignalMapper>
#include <QDebug>
#include <QString>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QSignalMapper *signalMapper = new QSignalMapper(this);
QPushButton *btns[4] = {ui->pushButton, ui->pushButton_2, ui->pushButton_3, ui->pushButton_4};
for(int i = 0; i < 4; ++i)
{
connect(btns[i], SIGNAL(clicked(bool)), signalMapper, SLOT(map()));
signalMapper->setMapping(btns[i], i);
}
connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(dealBtns(int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::dealBtns(int number)
{
switch (number) {
case 0:
qDebug() << "按钮 " + QString::number(number) + " 点击了";
break;
case 1:
qDebug() << "按钮 " + QString::number(number) + " 点击了";
break;
case 2:
qDebug() << "按钮 " + QString::number(number) + " 点击了";
break;
case 3:
qDebug() << "按钮 " + QString::number(number) + " 点击了";
break;
default:
break;
}
}