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
  • 相关阅读:
    在Java中使用 break/continue 语句来控制多重嵌套循环的跳转
    Android系统架构基本模式解析
    添加蓝牙通讯功能
    wince串口蓝牙
    Android各层推荐开发书籍及参考资料
    CDEFINES的用法
    蓝牙地址的规则
    WinCE中sources文件中targetlibs与sourcelibs的作用与区别
    Java初学者不得不知的概念,JDK,JRE,JVM的区别?
    WINCE的内存配置config.bib文件的解析
  • 原文地址:https://www.cnblogs.com/huty/p/8517234.html
Copyright © 2011-2022 走看看