如何映射到重载Qt槽
How to map to overload Qt slot
我想重载 Qt SLOT 以响应来自 QPushButton
的 clicked()
SIGNAL
或来自 QCheckBox
的 stateChanged(int)
信号(因为只有选中复选框时才不会发出信号)。
这是我的两个 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->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)
{
}
with widget->createCheckBox(SLOT(QString, int), data)
我也想将 ChechBox 的状态传递给重载的 Widget::sendCom(QString data, int state)
。映射如何完成?
根据文档 QSignalMapper
仅管理无参数信号。您可以从 QCheckBox
派生一个新的 class ,您将 stateChanged(int)
SIGNAL 连接到 class 中相应的插槽,在那里您发出 setChecked()
或 setUnchecked()
SIGNAL 可由 QSignalMapper
.
处理
我想重载 Qt SLOT 以响应来自 QPushButton
的 clicked()
SIGNAL
或来自 QCheckBox
的 stateChanged(int)
信号(因为只有选中复选框时才不会发出信号)。
这是我的两个 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->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)
{
}
with widget->createCheckBox(SLOT(QString, int), data)
我也想将 ChechBox 的状态传递给重载的 Widget::sendCom(QString data, int state)
。映射如何完成?
根据文档 QSignalMapper
仅管理无参数信号。您可以从 QCheckBox
派生一个新的 class ,您将 stateChanged(int)
SIGNAL 连接到 class 中相应的插槽,在那里您发出 setChecked()
或 setUnchecked()
SIGNAL 可由 QSignalMapper
.