Consuming a RESTful Web Service with C++ using QT libraries
After a long time I got a chance to work again with QT framework, Here are some of the findings about how to invoke RESTful webservices using QT. It's pretty easy really!!
requirements
g++ or compatible c++ compiler
QT5 or later with QtNetwork module
source
main.cpp
compile
g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I. -I/usr/include/qt5 -I/usr/include/qt5/QtNetwork -I/usr/include/qt5/QtCore -I. -o main.o main.cpp
link
g++ -m64 -Wl,-O1 -o jsonWSClinetTest main.o -lQt5Network -L/usr/lib/x86_64-linux-gnu -lQt5Core -lpthread
output
name: "Colombo"
lat: 6.93
lat: 79.85
requirements
g++ or compatible c++ compiler
QT5 or later with QtNetwork module
source
main.cpp
#include <QCoreApplication> #include <QtCore/QUrl> #include <QtNetwork/QNetworkRequest> #include <QtNetwork/QNetworkReply> #include <QJsonDocument> #include <QJsonObject> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QEventLoop eventLoop; QNetworkAccessManager mgr; QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); QNetworkRequest req( QUrl( QString("http://api.openweathermap.org/data/2.5/weather?q=colombo,lk") ) ); QNetworkReply *reply = mgr.get(req); eventLoop.exec(); if (reply->error() == QNetworkReply::NoError) { QString strReply = (QString)reply->readAll(); QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8()); QJsonObject jsonObj = jsonResponse.object(); qDebug() << "name: " << jsonObj["name"].toString(); qDebug() << "latitude: " << jsonObj.value(QString("coord")).toObject()["lat"].toDouble(); qDebug() << "longitude: " << jsonObj.value(QString("coord")).toObject()["lon"].toDouble(); delete reply; } else { qDebug() << "Failure" <<reply->errorString(); delete reply; } return 0; }
compile
g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I. -I/usr/include/qt5 -I/usr/include/qt5/QtNetwork -I/usr/include/qt5/QtCore -I. -o main.o main.cpp
link
g++ -m64 -Wl,-O1 -o jsonWSClinetTest main.o -lQt5Network -L/usr/lib/x86_64-linux-gnu -lQt5Core -lpthread
output
name: "Colombo"
lat: 6.93
lat: 79.85
I am using Qt5.4 to create a app for my embedded device. Is this sample works with my embedded device? Kind Regards
ReplyDeleteSorry, I have no experience with Qt on embedded devices
DeleteTnx for your qt code. Is it possible to write the server side of a restful service in qt? Imagine that I want to pass the below json to the client.
ReplyDelete{
"appDesc": {
"description": "SomeDescription",
"message": "SomeMessage"
},
"appName": {
"description": "Home",
"message": "Welcome",
"imp":["awesome","best","good"]
}
}
AFAIK there are no built-in support writing web services in QT, but there are plenty of implementations.
Deletee.g. http://stefanfrings.de/qtwebapp/index-en.html