Qt信号分组管理

平时开发过程中会遇到管理一组QPushButton的槽函数,我们首先想到的方法就是挨个connect它们的click()信号,但是Qt还提供了一种更nice的方法供我们使用,那就是QSignalMapper!

假如我们自定义了一个全是Button的面板类ButtonPanel,关键声明如下:

signals:
      void clicked(const QString &text);
      
private:
      QSignalMapper *signalMapper;

 UI初始化代码如下:

    QStringList texts;
    for(int i = 0; i < 50; ++i) {
        texts.append(tr(u8"Test Btn %1").arg(i));
    }

    signalMapper = new QSignalMapper(this);
    QGridLayout *gridLayout = ui->gridLayout;
    for (int i = 0; i < texts.size(); ++i) {
        QPushButton *button = new QPushButton(texts[i]);
        connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
        signalMapper->setMapping(button, texts[i]);
        gridLayout->addWidget(button, i / 3, i % 3);
    }

    connect(signalMapper, SIGNAL(mapped(QString)), this, SIGNAL(clicked(QString)));

通过关联QPushButton的click()信号到QSignalMapper的map()槽函数,并且通过setMapping方法,将每个QPushButton的click()信号进行映射,我们就可以将这一组QPushButton重新进行了组织,点击每个按钮,都会发出clicked(QString)信号,通过QString参数可以知道具体是哪一个按钮进行了点击。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值