QT SignalMapper(信号映射器)
来源:互联网 发布:js remove和delete 编辑:程序博客网 时间:2024/05/22 14:44
QT中通过信号/槽机制,将信号与槽函数关联。有时候希望获得信号发送者信息,QT提供了QObject::sender()函数来返回发送该信号的对象的指针。但是如果有多个信号关联到了同一个槽上,而在该槽中需要对每一个信号进行不同的处理,使用上面的方法就很麻烦了。对于这种情况,便可以使用QSignalMapper类。QSignalMapper可以叫做信号映射器,可以实现对多个相同部件的相同信号进行映射,为其添加字符串或者数值参数,然后再发射出去。
示例如下:
mainwidget.h
#ifndef MAINWIDGET_H#define MAINWIDGET_H#include <QWidget>#include <QSignalMapper>class MainWidget : public QWidget{ Q_OBJECT //槽函数private slots: //处理最终信号的槽 void doClicked(const QString & btnname);private: QSignalMapper *signalMapper;public: MainWidget(QWidget *parent = 0);};#endif // MAINWIDGET_H
mainwidget.cpp
#include <QGridLayout>#include <QPushButton>#include <QMessageBox>#include "mainwidget.h"void MainWidget::doClicked(const QString &btnname){ //显示被按下的btn名称。 QMessageBox::information(this, "Clicked", btnname + " is clicked!");}MainWidget::MainWidget(QWidget *parent) : QWidget(parent){ //10个button QString buttontext = "btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn10"; QStringList texts = buttontext.split(","); signalMapper = new QSignalMapper(this); QGridLayout *gridLayout = new QGridLayout; for (int i = 0; i < texts.size(); ++i) { QPushButton *button = new QPushButton(texts[i], this); button->setObjectName(texts[i]); //原始信号传递给signalmapper connect(button, SIGNAL(clicked()), signalMapper, SLOT(map())); signalMapper->setMapping(button, texts[i]); //设置signalmapper的转发规则, 转发为参数为QString类型的信号, 并把texts[i]的内容作为实参传递。 gridLayout->addWidget(button, i / 3, i % 3); } //将转发的信号连接到最终的槽函数 connect(signalMapper, SIGNAL(mapped(const QString &)), this, SLOT(doClicked(const QString &))); setLayout(gridLayout);}
main.cpp
#include "mainwidget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWidget w; w.show(); return a.exec();}
1 0
- QT SignalMapper(信号映射器)
- Qt-信号映射器
- qt 信号
- Qt中信号和槽函数的3种映射方法
- Qt中信号和槽函数的3种映射方法
- QSignalMapper 信号映射
- Qt 信号与信号,信号与槽
- qt-映射器-键盘的应用
- 信号理论: 信号集及其映射
- QT---QT的信号槽
- qt 槽与信号
- QT信号与槽
- Qt信号和槽
- QT 信号与槽
- QT信号和槽
- QT 事件和信号
- QT信号槽
- Qt信号自定义参数
- Linux(ubuntu)如何用iptables实现端口映射
- 算法提高 摆花
- Android AIDL详解(二)
- SLAM Start
- 一步一步来实现webpack+vue的多页面应用
- QT SignalMapper(信号映射器)
- 学习框架遇到的错误④
- 网络营销策略分析讲解
- Angular路由 ng-route和ui-router的区别
- android 游戏导引(4. 简单纹理贴图)
- mysql将一张表中的字段复制到不存在的表中
- mongodb[七]索引
- SDN控制器Floodlight源码学习(六)--链路发现模块(LinkDiscovery)
- 近段时间,经常翻看QT的一些Demo,我觉得可以大概写个QT入门系列的小文章