-
Notifications
You must be signed in to change notification settings - Fork 85
学习知识
aeagean edited this page Jul 21, 2018
·
1 revision
void HttpResponse::slotsMapOperation(QMultiMap<QString, QMap<QString, const QObject *> > &slotsMap)
{
autoInfterConvertedSupportMethod(slotsMap);
QMapIterator<QString, QMap<QString, const QObject *> > iter(slotsMap);
while (iter.hasNext()) {
iter.next();
const QString &key = iter.key();
const QMap<QString, const QObject *> &slotMap = iter.value();
const QObject *receiver = slotMap.first();
const QString &receiverSlot = slotMap.firstKey();
if (methodParams.contains(key)) {
connect(this,
methodParams[key].value("signal").toString().toStdString().data(),
receiver,
receiverSlot.toStdString().data(),
Qt::QueuedConnection);
}
}
}
2.这里由于在其他地方有链接到finish信号,其他地方接受到信号就会删除所在内存,包括HttpResponse实例.所以需要设置信号出发为异步,即执行完函数onFinished才触发信号finished即可解决问题.
void HttpResponse::onFinished()
{
QNetworkReply *reply = (QNetworkReply *)this->parent();
if (m_slotsMap.contains(N2S(SupportMethod::onResponse_QNetworkReply_A_Pointer)))
emit finished(reply);
else if (m_slotsMap.contains(N2S(SupportMethod::onResponse_QByteArray)))
emit finished(reply->readAll());
else if (m_slotsMap.contains(N2S(SupportMethod::onResponse_QVariantMap)))
emit finished(QJsonDocument::fromJson(reply->readAll()).object().toVariantMap());
reply->deleteLater();
}