QT之QSignalMapper
来源:互联网 发布:python pca 编辑:程序博客网 时间:2024/06/06 10:53
QT之QSignalMapper
- QT之QSignalMapper
- 简述
- 效果图
- 上代码
- 相关知识点文章
- 结尾
简述
QSignalMapper我们可以理解为转发器,此话怎讲呢?比如,按钮点击的响应槽,绑定到QSignalMapper上,QSignalMapper收到按钮的点击后,又通知到另外的控件上做处理。有的朋友会问了,为什么要这么麻烦,需要转一手,不能去掉中间的QSignalMapper,而直接调用吗。答案当然是可以的,为什么需要QSignalMapper这个转发器呢,我们先来看下效果,然后再看看代码,相信大家会喜欢上QSignalMapper这个转发器的。
效果图
上代码
void QSignalMapper_Demo::initControl(){ QVBoxLayout *pLayout = new QVBoxLayout(this); QString str = "Button1 Button2 Button3 Button4 Button5"; QStringList strList = str.split(" "); QSignalMapper *pMapper = new QSignalMapper(this); int nRowCnt = 0; foreach(QString itor, strList) { QPushButton *pBtn = new QPushButton(this); pBtn->setFixedHeight(CON_HEGIHT); pBtn->setText(itor); connect(pBtn, SIGNAL(clicked()), pMapper, SLOT(map())); pMapper->setMapping(pBtn, pBtn->text()); pLayout->addWidget(pBtn, nRowCnt++, 0); } QLineEdit *pEdit = new QLineEdit(this); pEdit->setFixedHeight(CON_HEGIHT); connect(pMapper, SIGNAL(mapped(QString)), pEdit, SLOT(setText(QString))); pLayout->addWidget(pEdit, nRowCnt, 0); pLayout->addStretch();}
眼光利索的朋友看到了我代码中,代码不规范,说你代码怎么就new,怎么没deltete,你这样不会内存泄漏吗,这里告诉大家是不会的哦,相关知识可以看我之前写的QT之内存泄漏管理。
回到本节,看完QSignalMapper的用法,我们回过头再看看,不用QSignalMapper,又该如何实现上面的效果呢,编辑框中我们可以看到,是哪个按钮被按下了。
//去掉QSignalMappervoid QSignalMapper_Demo::initControl(){ QVBoxLayout *pLayout = new QVBoxLayout(this); QString str = "Button1 Button2 Button3 Button4 Button5"; QStringList strList = str.split(" "); int nRowCnt = 0; foreach(QString itor, strList) { QPushButton *pBtn = new QPushButton(this); pBtn->setFixedHeight(CON_HEGIHT); pBtn->setText(itor); //这里,响应的是同一个槽,按钮被点击后,我们却不能知道是哪个按钮被按下。 connect(pBtn, SIGNAL(clicked()), this, SLOT(onclicked()())); //有的朋友说,可以每个按钮绑定不同的槽做区分呀,这样做可以是可以,但是你觉得使用QSignalMapper是不是要更简洁些呢? pLayout->addWidget(pBtn, nRowCnt++, 0); } QLineEdit *pEdit = new QLineEdit(this); pEdit->setFixedHeight(CON_HEGIHT); pLayout->addWidget(pEdit, nRowCnt, 0); pLayout->addStretch();}
看完代码,相信大家都知道了QSignalMapper的美!有的朋友又问了,我什么时候该用QSignalMapper呢?通过上面的例子很简单呀,我们需要处理同一个事情时,而简化多个不同的槽却做着相同的事,我们的QSignalMapper就派上用场啦!
相关知识点文章
QT之内存泄漏管理。
结尾
只为记录,只为分享! 愿所写能对你有所帮助。Good Good Study, Day Day Up!
0 0
- QT之QSignalMapper
- QT QSignalMapper
- Qt学习笔记 - QSignalMapper
- Qt 学习笔记 - QSignalMapper
- QT——QSignalMapper
- QT——QSignalMapper
- QSignalMapper
- QSignalMapper
- QSignalMapper
- QSignalMapper
- QSignalMapper
- QSignalMapper
- QSignalMapper
- QT中QSignalMapper类的用法
- 【QT开发】信号转发器QSignalMapper的使用
- QT 巧用QSignalMapper分类有序地处理大量信号
- QT中QSignalMapper类信号转发器的使用和说明
- Qt编程12:QSignalMapper多对一信号影射简单使用
- 在Linux上遇到的一个关于MySQL的奇葩问题
- C语言文件指针和文件描述符相互转换
- LightOJ1422: Halloween Costumes(区间dp)
- 构造函数与构造函数的继承以及call和apply的区别
- Android之---JNI/NDK开发指南
- QT之QSignalMapper
- esxi一故障
- 默认实参
- QPropertyAnimation 几行代码快速制作流畅的动画效果 - C/C++进阶之Qt图形UI库
- java面试题及答案(基础题122道,代码题19道)
- dsp入门
- Python(1):环境搭建(含Cython安装)
- Unity3D接入SDK - Android篇之Activity生命周期
- 成功=正确的方法+艰苦的努力+少说空话——《学习之道》+《刻意练习》+《练习的心态》