0

我想重载 Qt SLOT 以对从 a 发出clicked() SIGNAL的信号QPushButton或从 a 发出的信号作出反应(因为仅在选中复选框时没有发出信号)。stateChanged(int)QCheckBox

所以这是我的两个插槽。

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)。映射是如何完成的?

4

1 回答 1

2

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

于 2016-01-27T12:15:10.930 回答