QSignalMapper 是一种信号转发器,可以用于类似信号的转发处理,不如什么案件的触发,不用血多次,只用写一次信号就可以。
比如下面简单的键盘
直接代码
ui 界面
.h界面
#include <QMainWindow>
#include <QSignalMapper>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void setText(const QString& text);
void on_pushButton_12_clicked();
private:
void setMapper(); //设置转发
void connectMapper(); //连接转发器
private:
Ui::MainWindow *ui;
QSignalMapper *signalMapper; //信号转发器
.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->setFocus(); //获得焦点
signalMapper=new QSignalMapper(this); //信号转换器 创建
setMapper(); //信号转换器 设置
connectMapper(); //信号转换器 连接
//信号转换器和设置文字绑定
connect(signalMapper,SIGNAL(mapped(const QString&)),this,SLOT(setText(const QString&)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::setText(const QString& text)
{
ui->lineEdit->insert(text);
}
void MainWindow::setMapper()
{
signalMapper->setMapping(ui->pushButton,ui->pushButton->text());
signalMapper->setMapping(ui->pushButton_2,ui->pushButton_2->text());
signalMapper->setMapping(ui->pushButton_3,ui->pushButton_3->text());
signalMapper->setMapping(ui->pushButton_4,ui->pushButton_4->text());
signalMapper->setMapping(ui->pushButton_5,ui->pushButton_5->text());
signalMapper->setMapping(ui->pushButton_6,ui->pushButton_6->text());
signalMapper->setMapping(ui->pushButton_7,ui->pushButton_7->text());
signalMapper->setMapping(ui->pushButton_8,ui->pushButton_8->text());
signalMapper->setMapping(ui->pushButton_9,ui->pushButton_9->text());
signalMapper->setMapping(ui->pushButton_10,ui->pushButton_10->text());
signalMapper->setMapping(ui->pushButton_11,ui->pushButton_11->text());
}
void MainWindow::connectMapper()
{
connect(ui->pushButton,SIGNAL(clicked()),signalMapper,SLOT(map()));
connect(ui->pushButton_2,SIGNAL(clicked()),signalMapper,SLOT(map()));
connect(ui->pushButton_3,SIGNAL(clicked()),signalMapper,SLOT(map()));
connect(ui->pushButton_4,SIGNAL(clicked()),signalMapper,SLOT(map()));
connect(ui->pushButton_5,SIGNAL(clicked()),signalMapper,SLOT(map()));
connect(ui->pushButton_6,SIGNAL(clicked()),signalMapper,SLOT(map()));
connect(ui->pushButton_7,SIGNAL(clicked()),signalMapper,SLOT(map()));
connect(ui->pushButton_8,SIGNAL(clicked()),signalMapper,SLOT(map()));
connect(ui->pushButton_9,SIGNAL(clicked()),signalMapper,SLOT(map()));
connect(ui->pushButton_10,SIGNAL(clicked()),signalMapper,SLOT(map()));
connect(ui->pushButton_11,SIGNAL(clicked()),signalMapper,SLOT(map()));
}
//清空显示框
void MainWindow::on_pushButton_12_clicked()
{
ui->lineEdit->clear();
}
运行界面
