numaralı telefondan geri arama gerçekleştirme Qt'de bir çeşit geri arama gerçekleştirmek istiyorum.Qt
İstekte bulunmak için ApiHandler adlı bir sınıfım var. Ve bir işlevi makeRequest'a iletmek için bir yol olmalı ve replyFinished. std :: function/std :: bind kullanarak bir yolu biliyorum. Ama belki Qt kullanarak bunu yapmak için yollar var? Yuvalar? Veya bu durumda std :: function/std :: bind kullanarak hakkında daha ayrıntılı açıklama.
Teşekkürler!
typedef void (*callback)();
void ApiHandler::makeRequest(QString method, QMap<QString, QString> parameters, callback)
{
QUrl url = this->buildCall(method, parameters);
connect(this->manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*, callback)));
QNetworkRequest request;
request.setUrl(url);
request.setRawHeader("User-Agent", "Test");
QNetworkReply *reply = this->manager->get(request);
connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(slotError(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(slotSslErrors(QList<QSslError>)));
}
void ApiHandler::replyFinished(QNetworkReply* reply, callback)
{
qDebug() << "replyFinished" << reply->url();
QJsonDocument j = QJsonDocument::fromJson(reply->readAll());
if (j.isEmpty()) {
// throw error
}
// call the callback with "j" as parameter
// callback(j)
reply->deleteLater();
}
Kullanım durumu nedir? Std :: işlevine ihtiyacınız var, sadece geri arama derleme zamanında çözülemiyorsa. Tüm geri bildirimleri baforehand biliyorsanız, onları yuva yapın. – xvan
Farklı bir arama yapabilirim, bunun gibi QMap m; m ["user_id"] = this-> settings.value (USER_ID) .toString(); ApiHandler * a = new ApiHandler; a-> makeRequest ("users.isAppUser", m, testCallback); Ve farklı geri bildirimleri iletmem gerekiyor. Örneğin, bunu uygulamadan çağırırsam, bir uyarı görüntülemek için geri arama işlemini geri al, bu pencereden bunu çağırırsam, uygulamayı kullanan herhangi bir kullanıcı için geri aramadan geçiyorum. –
Alex
Farklı sinyaller için farklı nesneler kullanın ya da [yuvaları ayırın ve bağlayın] (http://stackoverflow.com/questions/28524925/how-to-disconnect-a-signal-with-a-slot-temporarily-in -qt) bağlamında – xvan