qt日志

在程序的运行过程中,debug版的可以调试,查看输出信息,release版的程序在运行过程中一旦出现崩溃等问题,使得无法查看问题发生的点,于是在项目中添加日志,变得极为重要。
此日志可以在程序debug版的时候,不生成日志,直接通过控制台查看输出信息,在release版的情况下可以生成日志,供查阅。
具体代码如下:
log.hpp

#ifndef LOG_H
#define LOG_H#include <QCoreApplication>
#include <QDebug>//#define OUTPUT_LOG //输出信息输出到输出控制台还是日志#ifdef  OUTPUT_LOG
#define  outPut  qOut//release版
#else
#define  outPut  qDebug()//debug版
#endif//日志文件名称
#define LOG_FILE     QCoreApplication::applicationDirPath()/*strFilePath*/ + "/logger.txt"
#define qOut qDebug()<<__FUNCTION__<<"["<<__LINE__<<"]"
#define xErrPrint  qCritical()<<__FUNCTION__<<"["<<__LINE__<<"]"#endif // LOG_H

在release版的时候打开#define OUTPUT_LOG宏定义的注释,这样在release版程序的运行目录下会生成日志文件,debug版程序可以不用打开#define OUTPUT_LOG的注释。
main.cpp

#include "maindialog.h"#include <QApplication>
#include <QFile>
#include "log.hpp"
#include <QMutex>
#include <QDateTime>
#include <QScreen>void MessageTypePut(QtMsgType type, const QMessageLogContext &context, const QString &msg);int main(int argc, char *argv[])
{
#ifdef OUTPUT_LOGqInstallMessageHandler(MessageTypePut);
#endifQApplication a(argc, argv);QString qss;QString strNameqss;QScreen *screenPrimary=QGuiApplication::primaryScreen();QRect screen =screenPrimary->availableGeometry();if(screen.width() > BASE_W && screen.height() > BASE_H){strNameqss = ":/guangdianadjust.qss";outPut<<"读取QSS文件guangdianadjust.qss";}else{strNameqss = ":/guangdian.qss";}QFile qssFile(strNameqss);//将qss引入到项目的资源文件,防止运行目录发生变化,找不到文件qssFile.open(QFile::ReadOnly);if(qssFile.isOpen()){qss = QString(qssFile.readAll());a.setStyleSheet(qss);qssFile.close();}MainDialog w;w.show();return a.exec();
}void MessageTypePut(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
//    getCurrFilePath();static QMutex mutex;mutex.lock();QString text;switch(type){case QtDebugMsg:text = QString("Debug:");break;case QtWarningMsg:text = QString("Warning:");break;case QtCriticalMsg:text = QString("Critical:");break;case QtFatalMsg:text = QString("Fatal:");break;default:break;}//日志写到文件QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");QString message = QString("%1 %2%3").arg(current_date_time).arg(text).arg(msg);QFile file(LOG_FILE);file.open(QIODevice::WriteOnly | QIODevice::Append);QTextStream text_stream(&file);text_stream << message << "\r\n";file.flush();//将缓冲的数据刷新到文件file.close();mutex.unlock();
}

在需要日志输出的地方调用output输出,使用方法和qDebug()相似,需要包含头文件#include “log.hpp”。
使用案例:

#include "log.hpp"str = QCoreApplication::applicationDirPath();str += "\\11.png";outPut<<"路径名:"<<str;

在主函数中安装消息句柄,首先声明这个函数MessageTypePut,按照这样就可以实现一个简单的日志输出。并在release版的程序生成日志,在debug版直接在输出台输出信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式架构系列: 负载均衡技术详解 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;ITFLY8转自&#xff1a;架构师技术联盟面对大量用户访问、高并发请求…

第七篇:Spring Boot整合Thymeleaf_入门试炼03

基本语法实战案例01 在ThymeleafController中添加此方法 RequestMapping("/show5")public String showInfo5(Model model) {model.addAttribute("msg", "Thymeleaf 第一个案例");model.addAttribute("key", new Date());return &quo…

Qt下自适应分辨率

qt下自适应分辨率应该有两种方法&#xff1a;通过栅格布局&#xff1b;通过缩放比。 本人采用的是缩放比来适应不同的分辨率。首先定义一个类实现屏幕分辨率和长宽缩放比的获取&#xff0c;由于该类可能被多个ui界面使用&#xff0c;所以定义为一个单例模式。代码如下&#xff…

OpenGL ES EGL 简介

目录 一.EGL 简介二.EGL 跨平台之 ANGLE 1.ANGLE 支持跨平台2.ANGLE 支持渲染器3.ANGLE 下载地址 三.EGL 坐标系四.EGL 绘图步骤五.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录…

第八篇:Spring Boot整合Thymeleaf_入门试炼04

继承parent父工程&#xff0c;新建一个子项目&#xff0c;名称为spring-boot-chapter-8 1、引入 thymeleaf 模板依赖 <!-- 引入 thymeleaf 模板依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-star…

华为发布基于第二代英特尔®至强®可扩展处理器家族的新一代服务器

2019年4月4日&#xff0c;在主题为“智能&#xff0c;计算进化”的发布会上&#xff0c;华为正式发布了基于第二代英特尔 至强 可扩展处理器以及支持英特尔傲腾 ™ 数据中心级持久内存的新一代FusionServerPro智能服务器&#xff0c;包括2路、4路机架式服务器&#xff0c;高密X…

qt样式表中背景图片的使用

使用样式表的设置背景的时候需要注意&#xff1a; background-image:url(); 设置的背景图片不会缩放拉伸&#xff0c;图片多大就展示多大&#xff0c;若控件比图片大&#xff0c;再没有设置图片填充方式的情况下则会出现重复添加图片&#xff0c;即用多个同样的图片来填充控件。…

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä'

java.sql.SQLException: The server time zone value ‘’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you w…

qt使用样式表来设置不规则按钮

参考代码如下&#xff1a; pixmap.load(":/new/prefix1/淳中切图/未选中-3.png");pixmap pixmap.scaled(QSize(125 / m_percentW,30 / m_percentH),Qt::KeepAspectRatio);m_sceneBtnGroup->setFixedSize(pixmap.size());bit pixmap.mask();m_sceneBtnGroup->…

第九篇:Spring Boot整合Spring Data JPA_入门试炼01

Spring Data JPA:介绍&#xff1a; Spring Data就是spring提供操作数据库的框架&#xff0c;而Spring Data JPA只是Spring Data框架下的一个基于JPA标准操作数据库的模块。 Spring Data JPA&#xff1a;基于JPA的标准对数据进行操作。简化持久层的代码&#xff0c;只需要写接口…

华为智能计算发布FusionServer Pro智能服务器

【中国&#xff0c;北京&#xff0c;2019年4月3日】华为智能计算业务部在北京召开了主题为“智能&#xff0c;计算进化”的发布会&#xff0c;正式发布FusionServer Pro智能服务器。将从“智能加速、智能管理、智能数据中心”三个层次助力数据中心智能化升级。 世界正从数字化…

qt场景中视图QGraphicsView的缩放

继承QGraphicsView自定义视图,重写wheelevent&#xff08;)事件&#xff0c;在滚轮事件中实现视图的放大和缩小。 放大缩小的主要代码&#xff1a; void GraphicsView::wheelEvent(QWheelEvent *e) {if(!m_isScroll){return ;}if (e->modifiers() & Qt::ControlModifie…

第九篇:Spring Boot整合Spring Data JPA_入门试炼02

Spring Data JPA 提供的核心接口 1、Repository接口 2、CrudRepository接口 3、PagingAndSortingRepository接口 4、JpaRepository接口 5、JpaSpecificationExecutor接口 Repository接口使用 1、提供了方法名称命名方式 持久层接口编写&#xff1a; /*** Repository接口的方法…

分布式精华问答:分布式环境下如何保持数据一致性的?| 技术头条

分布式开发的时代实际上早已悄悄地成为了时代的主流&#xff0c;今天&#xff0c;我们就来看看关于分布式的精华问答吧&#xff01;1Q&#xff1a;分布式系统中主要是用到了服务化&#xff0c;消息中间件&#xff0c;数据库拆分&#xff0c;便于横向扩展和维护&#xff0c;但分…

Qt中视图的缩放对应缩略图中矩形框的缩放

本文实现的目的是&#xff1a;视图缩放时&#xff0c;缩略图中的矩形框也进行缩放&#xff0c;而缩略图中的矩形区域为视图中的可见区。 获取视图中滚动条的值&#xff0c;将其值与缩略图所在的小窗口对比&#xff0c;可通过绘图求其比例&#xff0c;再按比例缩小。 首先提供主…

OpenGL ES EGL eglChooseConfig

目录 一. EGL 前言二. EGL 绘制流程简介三.eglGetConfigs 函数简介 四.eglGetConfigs 函数使用五.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基…

第九篇:Spring Boot整合Spring Data JPA_入门试炼03

CrudRepository接口的使用 CrudRepository接口&#xff0c;主要完成一些增删改查的操作。 注意&#xff1a;CrudRepository接口继承Repository接口 1、持久层接口&#xff1a; package com.gblfy.repository;import com.gblfy.pojo.Users; import org.springframework.data.r…

第九篇:Spring Boot整合Spring Data JPA_入门试炼04

六、PagingAndSortingRepository接口 前言&#xff1a;该接口提供了分页与排序的操作&#xff0c;该接口继承了CrudRepository 1、持久层接口&#xff1a; public interface UserRepositoryPagingAndSorting extends PagingAndSortingRepository<Users,Integer> { }测试…

qt创建图形项,添加自定义窗口

创建场景&#xff0c;视图和图形项之后&#xff0c;在图形项中添加自定义窗口。主要代码如下&#xff1a; scene new QGraphicsScene(0,0,1855,578,ui->insideWidget);//在开发中QGraphicsScene::sceneRect最好小于等于QGraphicsView::sceneRect大小&#xff0c;以保证在缩…

成立一周?谷歌人工智能道德委员会解散了?近日,金山云和小米刚签订了不超过9000万的硬件产品供应协议,闹哪样? | 极客头条...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 亚马逊推Alexa无线耳机&…