Q编程6:Qt日志处理方法(qInstallMsgHandler函数)简单实用
来源:互联网 发布:东华大学网络教育平台 编辑:程序博客网 时间:2024/05/29 19:26
主要应用的函数
QtMsgHandler qInstallMsgHandler(QtMsgHandler);
其中QtMsgHandler是函数指针,原型为
typedef void (*QtMsgHandler)(QtMsgType, const char *);
以下是在代码中的简单应用(以QNetWorkAccessManager 下载文件为例):
头文件实现:
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QtNetwork/QNetworkAccessManager>#include <QtNetwork/QNetworkReply>#include <QFile>//日志处理类class logger: public QObject{ Q_OBJECTpublic: ~logger(){} static logger *_instance; static logger *instance();public: void loggerMaster(const QString &);signals: void G_sndMsg(const QString &);private: //将默认构造函数设置为私有 logger(QObject *parent = 0): QObject(parent){}};//窗口类namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushButton_clicked(); void S_disLog(const QString &); void S_updateProgress(qint64 _done, qint64 _total); void S_getZipData(); void S_finishDown();private: Ui::MainWindow *ui; QNetworkAccessManager *manager; QNetworkReply *reply; bool isDownLoadOver; QFile file;};#endif // MAINWINDOW_H
cpp文件实现
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QTime>#include <QDebug>//-----------------------------------------日志处理部分开始//初始化静态变量logger * logger::_instance = 0;//构建单实例日志对象logger * logger::instance(){ if(!logger::_instance) logger::_instance = new logger; return logger::_instance;}void logger ::loggerMaster(const QString & msg){ //在日志信息中加入时间标记 QString newLog = QDateTime::currentDateTime().toString(QLatin1String("MM-dd hh:mm:ss:zzz")) + QLatin1Char(' ') + msg; //发送处理后的日志信息 emit G_sndMsg(newLog);}//日志处理函数void logCatcher(QtMsgType type,const char* msg){ if(type == QtDebugMsg || type == QtWarningMsg) //将日志信息传递给logger处理函数 logger::instance()->loggerMaster(QString::fromLocal8Bit(msg));}//------------------------------------------日志处理部分结束MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), isDownLoadOver(false), ui(new Ui::MainWindow){ ui->setupUi(this); //构建QNetworkAccessManager对象 manager = new QNetworkAccessManager(this); //准备下载文件的地址:例如htp:htp://***.***.***.***/ze.zip QUrl url("ht*********-win32-2.0.1.zip"); QNetworkRequest request(url); reply = manager->get(request); //更新现在进度条 connect(reply,SIGNAL(downloadProgress(qint64,qint64)),SLOT(S_updateProgress(qint64,qint64))); //接收数据 connect(reply,SIGNAL(readyRead()),SLOT(S_getZipData())); //提示接收数据完成 connect(reply,SIGNAL(finished()),SLOT(S_finishDown())); //------------------------------------日志处理 //注册日志处理函数 qInstallMsgHandler(logCatcher); //连接日志,接收从logger实例中返回的日志信息 connect(logger::instance(),SIGNAL(G_sndMsg(QString)),SLOT(S_disLog(QString))); file.setFileName("download.zip"); //打开文件 file.open(QIODevice::WriteOnly);}MainWindow::~MainWindow(){ delete ui;}void MainWindow::on_pushButton_clicked(){ close();}//将日志信息追加到QPlainTextEdit控件中void MainWindow::S_disLog(const QString & msg){ ui->plainTextEdit->appendPlainText(msg);}//更新进度条void MainWindow::S_updateProgress(qint64 _done, qint64 _total){ int qVal = qRound(_done/(double)_total * 100); if( qVal > 100 ) qVal = 100; ui->progressBar->setValue(qVal); qDebug()<<QString("已经下载文件的 \%%1").arg(QString::number(qVal,10)); if(100 == qVal) { isDownLoadOver = true; }}//获取数据void MainWindow::S_getZipData(/*QNetworkReply *_relay*/){ if( reply->error() != QNetworkReply::NoError ) { qWarning() << tr("...文件下载失败...")+ reply->errorString(); file.remove(); ui->pushButton->setEnabled(true); return; } QByteArray bArray = reply->readAll(); file.write(bArray);}//下载完成void MainWindow::S_finishDown(){ if(isDownLoadOver) { qDebug() << (tr("...软件下载成功...")); ui->pushButton->setEnabled(true); }}
实现效果:
//以上我在做软件更新的时候用到过。
0 0
- Q编程6:Qt日志处理方法(qInstallMsgHandler函数)简单实用
- Qt全局函数qInstallMsgHandler安装消息句柄,实现日志输出
- qInstallMsgHandler
- 使用qInstallMsgHandler将日志保存到文件
- Qt:&OpenCV—Q图像处理基本操作(Code)
- Qt中中文处理的简单方法
- Qt编程19:Qt时间日期的处理(QTime、QDateTime的使用比较简单)
- 关于日期,java处理日期间隔的方法(简单实用)
- QT编程系列7--一个最简单的实用Qt界面的设计
- 实用视频处理方法
- 简单实用的打印函数执行日志的代码WriteLog函数
- 实用函数编程《序》
- 实用函数编程
- log4j日志在java控制台输出,简单实用(转载)
- JavaScript学习总结-技巧、实用函数、简洁方法、编程细节
- JavaScript学习总结-技巧、实用函数、简洁方法、编程细节
- Javascript学习总结-技巧、实用函数、简介方法、编程细
- JavaScript学习总结-技巧、实用函数、简洁方法、编程细节
- webBrowser 清空cookie
- libstreaming 源码分析一之RTSP连接
- iphone5、xcode4.5
- redis 下key的过期时间详解:expire
- oracle 游标详解
- Q编程6:Qt日志处理方法(qInstallMsgHandler函数)简单实用
- mysql数据库恢复(*frm)文件
- libstreaming源码分析二之MediaRecorder编码
- 苹果公司Swift语言将掀起革命
- 初学php html javascript后小总结
- java连接BerkeleyDB数据库使用实例
- libstreaming源码分析三之H264 RTP打包
- 深入源码看JAVA集合的数据结构
- Android开源项目CircleImageView分析