zoukankan      html  css  js  c++  java
  • 【QT开发】信号转发器QSignalMapper的使用

    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
  • 相关阅读:
    我理解的 js 异步成长总结
    小程序 获取地理位置-- wx.getLocation
    H5页面在微信端的分享
    ES6 我的总结学习
    5 分钟掌握 JS 实用窍门技巧,帮你快速撸码--- 删除数组尾部元素、E6对象解构、async/await、 操作平铺嵌套多维数组等
    小程序 video 层级,原生组件
    React 事件 传参
    微信小程序中如何使用setData --- 修改数组对象、修改对象
    流氓式--小程序用户授权 --- 小程序授权、获取用户信息
    深度学习的反向传播笔记
  • 原文地址:https://www.cnblogs.com/huty/p/8517234.html
Copyright © 2011-2022 走看看