QtApplets-QSignalMapper使用

Posted DreamLife.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QtApplets-QSignalMapper使用相关的知识,希望对你有一定的参考价值。

QtApplets-QSignalMapper使用

​ 直接上参考链接吧,这个已经废弃了,官方建议使用Lambda替代了。 QSignalMapper,QSignalMapper类收集了一系列的无参信号,然后使用相对于信号发送者来说的整数、字符串或控件参数来重新发送它们。


关键字: QSignalMapperQtlambda关键字4关键字5

QSignalMapper

​ 其实,该类的一个典型的使用场合是,大量控件都要相应槽函数,而这些槽函数的实现又大致相同。这种情况下,最直接的办法就是仍然为每一个控件的相应信号创建一个槽函数。但这会导致代码的大量重复。此时,我们就可以使用QSignalMapper来实现这种需求。

QSignalMapper类支持使用setMapping()函数将一个特定的整数或字符串和一个特定的对象关联起来。然后,可以将对象的信号连接到QSignalMapper对象的map()槽函数上,而map()槽函数又会使用与对象相关联的整数或字符串来发送mapped()信号。所以,我们只要将我们定义的一个槽函数连接到mapped()信号,即可处理大量相似控件的槽函数。

​ 以上内用来之:https://blog.csdn.net/Amnes1a/article/details/70050788

演示效果:如下

代码部分

    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(20);
        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(30);
    connect(pMapper, SIGNAL(mapped(QString)), pEdit, SLOT(setText(QString)));
    pLayout->addWidget(pEdit, nRowCnt, 0);
    pLayout->addStretch();

☞ 源码

源码链接:GitHub仓库自取

使用方法:☟☟☟


以上是关于QtApplets-QSignalMapper使用的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份