把 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(); } }
参考文档: