QT之QSignalMapper

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014746838/article/details/86701644

简述

       QSignalMapper我们可以理解为转发器,此话怎讲呢?比如,按钮点击的响应槽,绑定到QSignalMapper上,QSignalMapper收到按钮的点击后,又通知到另外的控件上做处理。有的朋友会问了,为什么要这么麻烦,需要转一手,不能去掉中间的QSignalMapper,而直接调用吗。答案当然是可以的,为什么需要QSignalMapper这个转发器呢,我们先来看下效果,然后再看看代码,相信大家会喜欢上QSignalMapper这个转发器的。

效果图

上代码

void QSignalMapper_Demo::initControl()
{
    QVBoxLayout *pLayout = new QVBoxLayout(this);

    QString str = "Button1 Button2 Button3 Button4 Button5";
    QStringList strList = str.split(" ");
    QSignalMapper *pMapper = new QSignalMapper(this);

    int nRowCnt = 0;
    foreach(QString itor, strList)
    {
        QPushButton *pBtn = new QPushButton(this);
        pBtn->setFixedHeight(CON_HEGIHT);
        pBtn->setText(itor);

        connect(pBtn, SIGNAL(clicked()), pMapper, SLOT(map()));
        pMapper->setMapping(pBtn, pBtn->text());

        pLayout->addWidget(pBtn, nRowCnt++, 0);
    }

    QLineEdit *pEdit = new QLineEdit(this);
    pEdit->setFixedHeight(CON_HEGIHT);
    connect(pMapper, SIGNAL(mapped(QString)), pEdit, SLOT(setText(QString)));
    pLayout->addWidget(pEdit, nRowCnt, 0);
    pLayout->addStretch();
}

猜你喜欢

转载自blog.csdn.net/u014746838/article/details/86701644