【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
posted @ 2017-03-16 11:50  ZhangPYi  阅读(191)  评论(0编辑  收藏  举报