您的位置:首页 > 移动开发

【QT开发】信号转发器QSignalMapper的使用

2017-03-16 19:49 459 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: