簡単な HTTP get 操作を行います。JSON の結果を取得し、それを解析します。関数でこの操作手順を使用します。 QtConcurrent::run 、 HttpGet Function で関数を開始します。
void MobileOperations::GetHTTPData(MyGlobal::Metods MetodName, QString Parameters, QMap<QString, QVariant> paramlist)
{
parameter=new HttpRequest();
parameter->url=m_url;
parameter->metodname=MetodName;
parameter->resource=m_path;
parameter->appid=m_appid;
parameter->apppass=m_apppass;
parameter->parametersname=Parameters;
parameter->params=paramlist;
rest= new RestWebservice(parameter->GenerateHTTPQuery(),MetodName);
json=new JSonParser();
loop=new QEventLoop();
QObject::connect(rest,SIGNAL(sendhttpdata(QByteArray,MyGlobal::Metods)),&json,SLOT(onGetData(QByteArray,MyGlobal::Metods)));
QObject::connect(&json,SIGNAL(serilazitionCompleted()),loop,SLOT(quit()));
rest->get();
loop->exec();
}
ここで、Http get リクエストを開始し、json の結果が解析されるまでループで待機します。この関数を次のように呼び出します。
void MobileOperations::getUserAccountT( QString kullaniciAdi, QString sifre)
{
MyGlobal::Metods metod=MyGlobal::KullaniciGiris;
QString parameters="{UserId}/{UserPass}/{GSM}";
QMap<QString,QVariant> paramlist;
paramlist["UserId"]=kullaniciAdi;
paramlist["UserPass"]=sifre;
paramlist["GSM"]="";
GetHTTPData(metod,parameters,paramlist);
if(json.user.IsSuccess==true)
{
emit successlogin("Login Başarılı");
emit processstop("Login Başarılı");
}
else
{
emit processstop("Bağlantı Başarısız Oldu");
}
qDebug()<<json.user.IsSuccess<<json.user.UserName;
}
void MobileOperations::getUserAccount(QString kullaniciAdi, QString sifre)
{
QFutureWatcher<void> watcher;
connect(&watcher,SIGNAL(canceled()),&watcher,SLOT(deleteLater()));
QFuture<void> t1= QtConcurrent::run(this,&getUserAccountT,kullaniciAdi,sifre);
watcher.setFuture(t1);
emit processstart("Bağlanıyor");
}
フリーズ画面を回避するためにスレッドを使用しますが、スレッドは決して終了しません。