如何映射到重载Qt插槽

How to map to overload Qt slot

本文关键字:重载 Qt 插槽 映射 何映射      更新时间:2023-10-16

我想重载Qt插槽,以对来自QPushButton发出的clicked() SIGNAL或来自QCheckBoxstateChanged(int)信号做出反应(因为仅在选中复选框时没有发出SIGNAL)。

这是我的两个插槽。

void Widget::sendCom(QString data)
{
    std::cout << "In scope of sendCom"<< std::endl;
}
void Widget::sendCom(QString data, int state)
{
    std::cout << "In scope of overloaded sendCom: " << std::endl;
}

有了widget->createButton(SLOT(sendCom(QString), data);,我调用以下内容,映射工作正常。

void Widget::createButton(const char *member, QString &data)
{
    QPushButton *button = new QPushButton(this);
    signalMapper = new QSignalMapper(this);
    signalMapper->setMapping(button, data);
    connect(signalMapper, SIGNAL(mapped(QString)), this, member);
    connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
    ...
}

void Widget::createCheckBox(const char *member, QString &data)
{
}

有了widget->createCheckBox(SLOT(QString, int), data)我也想将 ChechBox 的状态传递给超载Widget::sendCom(QString data, int state)。如何进行映射?

根据文档QSignalMapper仅管理无参数信号。您可以从QCheckBox派生一个新类,在该类中,您将stateChanged(int) SIGNAL连接到类中的相应插槽,在该插槽中,您可以发出setChecked()setUnchecked()信号,该信号可由QSignalMapper处理。