【问题标题】:How to map to overload Qt slot如何映射到重载 Qt 插槽
【发布时间】:2016-01-27 11:01:40
【问题描述】:

我想重载 Qt SLOT 以对来自QPushButtonclicked() SIGNAL 或来自QCheckBoxstateChanged(int) SIGNAL 作出反应(因为当复选框为仅检查)。

所以这是我的两个 SLOT。

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-&gt;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-&gt;createCheckBox(SLOT(QString, int), data),我也想将 ChechBox 的状态传递给重载的Widget::sendCom(QString data, int state)。如何进行映射?

【问题讨论】:

    标签: c++ qt qsignalmapper


    【解决方案1】:

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

    【讨论】:

    • 这可能是最有效的方法。我想通过 setCheckState 使用 dynamic_cast 识别发件人并获取状态
    • 按建议实施。像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 2017-06-09
    • 2016-03-11
    • 1970-01-01
    • 2013-05-23
    相关资源
    最近更新 更多