【QT开发】信号转发器QSignalMapper的使用
2017-03-16 19:49
459 查看
QSignalMapper我们可以将它理解为一个信号翻译器或者说是哥信号转发器。它的主要应用在于可以实现一个函数相应不同按钮的实现功能。比如我们 实现一个计算器的时候,很多不同的按钮都有着差不多的功能,数字0~9的按钮,功能都是输入数字,只是输入的数值不一样而已,如果不使用
QSignalMapper,我们不得不写10个函数作为各自按钮的响应事件。这里我就通过这个简单的实例讲解下QSignalMapper的用法。
类内的成员:
QPushButton
*numButt[10];
QLabel
*info;
QLineEdit
*inputEdit;
QHBoxLayout
*hLay;
QVBoxLayout
*vLay;
QGridLayout
*gLay;
QSignalMapper
*sigMap;
myinput::myinput(QWidget *parent) :
QWidget(parent)
{
hLay
= new QHBoxLayout;
vLay
= new QVBoxLayout;
gLay
= new QGridLayout;
vLay->addLayout(hLay);
vLay->addLayout(gLay);
info
= new QLabel(tr("the power: "), this);
inputEdit
= new QLineEdit;
hLay->addWidget(info);
hLay->addWidget(inputEdit);
sigMap
= new QSignalMapper(this); //创建QSignalMapper对象
for
(int i = 0; i < 10; ++i) {
numButt[i]
= new QPushButton(tr(QString::number(i).toStdString().c_str()), this);
//创建0~9按钮对象,按钮显示的text内容就是数值0~9
gLay->addWidget(numButt[i],
i/4, i%4); //加入布局
connect(numButt[i],
SIGNAL(clicked()), sigMap, SLOT(map()));
//将原始信号传递给QSignalMapper对象
sigMap->setMapping(numButt[i],
i);
//设置转发规则,转发为参数为int型的信号,并将i作为实参传递
}
connect(sigMap,
SIGNAL(mapped(int)), this, SLOT(sl_push(int)));
//将转发信号连接到对应的槽函数
this->setLayout(vLay);
}
参考文献:
http://www.cuteqt.com/blog/?p=512
QSignalMapper,我们不得不写10个函数作为各自按钮的响应事件。这里我就通过这个简单的实例讲解下QSignalMapper的用法。
类内的成员:
QPushButton
*numButt[10];
QLabel
*info;
QLineEdit
*inputEdit;
QHBoxLayout
*hLay;
QVBoxLayout
*vLay;
QGridLayout
*gLay;
QSignalMapper
*sigMap;
myinput::myinput(QWidget *parent) :
QWidget(parent)
{
hLay
= new QHBoxLayout;
vLay
= new QVBoxLayout;
gLay
= new QGridLayout;
vLay->addLayout(hLay);
vLay->addLayout(gLay);
info
= new QLabel(tr("the power: "), this);
inputEdit
= new QLineEdit;
hLay->addWidget(info);
hLay->addWidget(inputEdit);
sigMap
= new QSignalMapper(this); //创建QSignalMapper对象
for
(int i = 0; i < 10; ++i) {
numButt[i]
= new QPushButton(tr(QString::number(i).toStdString().c_str()), this);
//创建0~9按钮对象,按钮显示的text内容就是数值0~9
gLay->addWidget(numButt[i],
i/4, i%4); //加入布局
connect(numButt[i],
SIGNAL(clicked()), sigMap, SLOT(map()));
//将原始信号传递给QSignalMapper对象
sigMap->setMapping(numButt[i],
i);
//设置转发规则,转发为参数为int型的信号,并将i作为实参传递
}
connect(sigMap,
SIGNAL(mapped(int)), this, SLOT(sl_push(int)));
//将转发信号连接到对应的槽函数
this->setLayout(vLay);
}
参考文献:
http://www.cuteqt.com/blog/?p=512
相关文章推荐
- Qt编程12:QSignalMapper多对一信号影射简单使用
- 详解 Qt 线程间共享数据(使用signal/slot传递数据,线程间传递信号会立刻返回,但也可通过connect改变)
- 嵌入式 QT开发使用信号和槽的机制
- QT SignalMapper(信号映射器)
- Nokia Qt SDK开发环境使用
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-在UI中应用DataUIMapper组件
- Linux 下 Qt Creator 的安装,并使用它开发你的第一个 Qt 项目全过程
- 使用Qt从事跨平台开发时IDE的选择
- qt学习笔记--使用qtcreator开发【0831】
- Qt简介以及如何配置Qt使用VS2010进行开发
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-在UI中应用DataUIMapper组件
- 【ZZ】Linux下应用程序开发:QT的信号与槽机制
- Qt的信号(signal)和槽(slot)机制(讲解很到位)
- Qt简介以及如何配置Qt使用VS2010进行开发
- Qt简介以及如何配置Qt使用VS2010进行开发(摘)
- Qt简介以及如何配置Qt使用VS2010进行开发
- Linux 下 Qt Creator 的安装,并使用它开发你的第一个 Qt 项目全过程
- Qt的signal/slot机制的原理和使用
- 检测Qt for symbian前后台切换 以及 信号槽使用的注意事项
- Qt简介以及如何配置Qt使用VS2010进行开发