把 QNetworkAccessManager 的 get/post 请求封装成函数,此方法可以避免使用槽函数响应网络请求;
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QEventLoop>
#include <QTextCodec>
static QString UrlRequestGet( const QString url )
{
QNetworkAccessManager qnam;
const QUrl aurl( url );
QNetworkRequest qnr( aurl );
qnr.setRawHeader("Content-Type","application/json");
QNetworkReply *reply = qnam.get( qnr );
QEventLoop eventloop;
connect( reply,SIGNAL(finished()),&eventloop,SLOT(quit()));
eventloop.exec( QEventLoop::ExcludeUserInputEvents);
QTextCodec *codec = QTextCodec::codecForName("utf8");
QString replyData = codec->toUnicode( reply->readAll() );
reply->deleteLater();
reply = 0;
return replyData;
}
static QString UrlRequestPost( const QString url,const QString data )
{
QNetworkAccessManager qnam;
const QUrl aurl( url );
QNetworkRequest qnr( aurl );
qnr.setRawHeader("Content-Type","application/json;charset=GBK");
QNetworkReply *reply = qnam.post( qnr, data.toLocal8Bit() );
QEventLoop eventloop;
connect( reply,SIGNAL(finished()),&eventloop,SLOT(quit()));
eventloop.exec( QEventLoop::ExcludeUserInputEvents);
QTextCodec *codec = QTextCodec::codecForName("utf8");
QString replyData = codec->toUnicode( reply->readAll() );
reply->deleteLater();
reply = 0;
return replyData;
}
生成日志文件
#include <QFile>
#include <QByteArray>
#include <QDateTime>
static void log( const QString &logFile, const QByteArray &data )
{
QFile file( logFile );
if( file.open(QIODevice::WriteOnly | QIODevice::Append) )
{
QByteArray ba = QDateTime::currentDateTime().toString( "yyyy-MM-dd hh:mm:ss" ).toLocal8Bit();
ba += " " + data + "\n";
file.write( ba );
file.close();
}
}
参考文档: