I'm trying to figure out a more flexible way to do QNetworkReply. Ideally this 
would be through some async/await but I don't think Qt is "there" yet. (C++20 
defines async/await, but there is not a library yet, and even Qt6 doesn't 
target C++20). So the callback lambda handler looks like the best option for 
now.

I have a QObject derived class, with a post() function. It takes an endpoint, 
and object (to be converted to JSON) and a lambda. Example:
remoteCloud->post("/login", credentials, [=](QNetworkReply* reply){
        if (reply->error() == QNetworkReply::NoError) {
                update("cartridge",
                           {{"synced", QDateTime::currentDateTime()}},
                           {{"cartridgeId", map["cartridgeId"]}});
        }
        reply->deleteLater();
});

With an implementation of:
template<typename F>
QNetworkReply *RemoteCloud::post(const QString& endpoint, const QVariantMap& 
item, F &lambda) {
        QNetworkReply* reply = m_nam.post(QNetworkRequest(endpoint), 
JSON(item));
        connect(reply, &QNetworkReply::finished, lambda);
        return reply;
}


Note that a lot of the Qt examples use a connect statement like this:
connect(reply, &QNetworkReply::finished, [request, reply](){ ... });

But when I tried to set this up, I either got static assert errors or l-value 
errors.

However I am trying to go one better and have my RemoteCloud::post set up the 
connect with the lambda. Is this possible?

_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to