QSignalMapper用法

转自:
https://www.cnblogs.com/wlsandwho/articles/8930900.html

http://blog.chinaunix.net/uid-26808060-id-3360037.html
以及
https://blog.csdn.net/u012474678/article/details/32141911
用途:多个signal对应同一个slot,而且slot对每个signal处理不同时,可以考虑用QSignalMappe

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QSignalMapper *signalMapper;
    QString buttontext = "btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn10";//10个button

    QStringList texts = buttontext.split(",");

    signalMapper = new QSignalMapper(this);

    QGridLayout *gridLayout = new QGridLayout;

    for (int i = 0; i < texts.size(); ++i)

    {

    QPushButton *button = new QPushButton(texts[i]);

    connect(button, SIGNAL(clicked()), signalMapper, SLOT(map ()));//原始信号传递给signalmapper

    signalMapper->setMapping (button, texts[i]);

    //设置signalmapper的转发规则, 转发为参数为QString类型的信号, 并把texts[i]的内容作为实参传递。

    gridLayout->addWidget(button, i / 3, i % 3);

    }

    connect(signalMapper, SIGNAL(mapped (const QString &)), this, SLOT(doClicked(const QString &)));//将转发的信号连接到最终的槽函数

    setLayout(gridLayout);
}


void Widget::doClicked(const QString& btnname)

{

QMessageBox::information(this, "Clicked", btnname + " is clicked!");//显示被按下的btn名称。

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值