Qt qDebug基本的使用方法详解

目录

  • qDebug基本用法
    • 输出字符串
    • 输出变量值1
    • 输出变量值2
    • 支持流式输出
    • 输出十六进制
    • 去除双引号和空格
    • 调试输出级别
  • 自定义类型输出
  • 自定义日志信息的输出格式
    • 示例
    • 占位符
    • 设置环境变量
  • 关闭QDebug输出
    • Qt工程
    • VS工程
  • 在VS工程中如何查看qDebug输出

DebugView下载

qDebug基本用法

  qDebug是Qt框架中用于输出调试信息的一个宏。它类似于C++标准库中的std::cout,用于在控制台中输出调试信息。qDebug的使用非常简单,可以用于输出各种类型的数据,例如字符串、整数、浮点数等。

输出字符串

qDebug() << "Hello, World!";

输出变量值1

int num = 10;
qDebug() << "num is: " << num;

输出变量值2

QString name = "xiao";
int age = 25;
qDebug() << QString("Name: %1, Age: %2").arg(name).arg(age);

支持流式输出

int num = 10;
QString name = "xiao";
qDebug() << "num is: " << num << ", name is: " << name;

输出十六进制

int num = 80;
qDebug() << QString("0x%1").arg(num, 8, 16, QChar('0')); //十六进制输出,8位,不够补0

在这里插入图片描述

去除双引号和空格

QString name = "xiao";
QString age = "20";
qDebug() << name << age;  //输出带有双引号和空格

在这里插入图片描述

QString name = "xiao";
QString age = "20";
qDebug().noquote().nospace() //不带双引号和空格<< name << age;

在这里插入图片描述

调试输出级别

qInfo、qWarning、qCritical等,用于输出不同级别的调试信息。

自定义类型输出

class Size {
public:Size(int w, int h) {this->width = w;this->height = h;}//添加友员函数,可以在此函数中访问类中的所有成员friend QDebug operator<<(QDebug dbg, const Size &size);
private:int width;int height;
};//实现输出运算符重载
QDebug operator<<(QDebug dbg, const Size &size)
{dbg.nospace() << "Size(" << size.width << "," << size.height << ")";return dbg;
}int main(int argc, char *argv[])
{Size size(1, 20);qDebug() << size;return 0;
}

在这里插入图片描述

自定义日志信息的输出格式

  qSetMessagePattern 是 Qt 提供的一个功能强大的函数,用于设置日志信息的输出格式和样式。它允许你自定义日志消息的显示方式,包括消息类型、时间戳、文件名、行号等。

  通过 qSetMessagePattern 函数,你可以设置一个模式字符串,用于格式化日志消息。该模式字符串可以包含占位符,用于指示消息的不同部分。例如,你可以使用 %type 占位符表示消息类型,%time 占位符表示时间戳,%file 占位符表示文件名,%line 占位符表示行号等。

示例

int main(int argc, char *argv[])
{qSetMessagePattern("%{time yyyy-MM-dd hh:mm:ss.zzz} %{type} - %{message} %{file}:%{line}");qDebug() << "hello world!";return 0;
}

在这里插入图片描述

占位符

占位符描述
%{appname}QCoreApplication::applicationName()
%{category}Logging category
%{file}Path to source file
%{function}Function
%{line}Line in source file
%{message}The actual message
%{pid}QCoreApplication::applicationPid()
%{threadid}The system-wide ID of current thread (if it can be obtained)
%{qthreadptr}A pointer to the current QThread (result of QThread::currentThread())
%{type}“debug”, “warning”, “critical” or “fatal”
%{time process}time of the message, in seconds since the process started (the token “process” is literal)
%{time boot}the time of the message, in seconds since the system boot if that can be determined (the token “boot” is literal). If the time since boot could not be obtained, the output is indeterminate (see QElapsedTimer::msecsSinceReference()).
%{time [format]}system time when the message occurred, formatted by passing the format to QDateTime::toString(). If the format is not specified, the format of Qt::ISODate is used.
%{backtrace [depth=N] [separator=“…”]}A backtrace with the number of frames specified by the optional depth parameter (defaults to 5), and separated by the optional separator parameter (defaults to “|”). This expansion is available only on some platforms (currently only platfoms using glibc). Names are only known for exported functions. If you want to see the name of every function in your application, use QMAKE_LFLAGS += -rdynamic. When reading backtraces, take into account that frames might be missing due to inlining or tail call optimization.

设置环境变量

可以修改环境变量QT_MESSAGE_PATTERN来修改输出格式,如果调用了qSetMessagePattern函数并设置了QT_MESSAGE_PATTERN,则环境变量优先。

关闭QDebug输出

Qt工程

在Qt工程文件(xxxxx.pro)里面添加

DEFINES += QT_NO_DEBUG_OUTPUT

在这里插入图片描述

VS工程

vs工程=>右键“属性”=>“C/C++”=>“预处理器”=>“预处理器定义”
在这里插入图片描述

在VS工程中如何查看qDebug输出

DebugView下载
如果您在Visual Studio工程中使用qDebug觉得不便,我为您推荐一款能够即时查看qDebug输出的实用工具——DebugView。

DebugView是一款专门用于捕获调试信息的工具,尤其适用于处理qDebug的输出。它能够在您运行Qt应用程序时,即时、动态地捕获并显示qDebug的日志信息。这意味着,无论您在代码中的哪个位置使用qDebug进行调试输出,DebugView都能为您捕捉并呈现这些信息,让您轻松跟踪程序的执行流程。

使用DebugView查看qDebug输出的步骤相当简单:

  1. 首先,启动DebugView工具。
  2. 随后,运行您的Qt应用程序。
  3. 当您的程序通过qDebug输出调试信息时,这些信息将会被DebugView实时捕获并展示在界面上。

借助DebugView的帮助,您将能够更轻松地在Visual Studio工程中管理和调试Qt应用程序。这款工具不仅限于qDebug的查看,它还提供了更多高级功能,帮助您更好地理解和调试您的程序。

在这里插入图片描述
DebugView下载

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

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

相关文章

大学生如何当一个程序员——第三篇:热门专业学习之路1

第三篇&#xff1a;热门专业学习之路1 1.JAVASE2.数据库3.网页设计和开发4.Servlet/ JSP和企业级项目开发5.SSM框架&#xff08;Spring、Spring MVC、Mybatis&#xff09;6.各种JAVA新技术和大型项目的整合7.微服务架构8.一定要做一个大项目&#xff01; 各位小伙伴想要博客相关…

Python如何实现微信支付功能代码示例

微信支付是一种基于互联网的移动支付服务&#xff0c;由中国的即时通讯工具微信提供。用户可以通过微信支付在微信平台上进行在线支付、转账和收款。微信支付支持多种支付方式&#xff0c;包括银行卡支付、微信钱包余额支付、扫码支付等。用户可以用微信支付购买商品、支付账单…

SpringBoot Redis入门(一)——redis、Lettuce、Redisson使用

本章&#xff1a;将展示SpringBoot集成Redis三种客户端的配置要点和常见应用示例&#xff1b;下章&#xff1a;自行实现一个方法级的缓存注解&#xff0c;简化版的Cacheable&#xff0c;使初学者加深对Spring缓存框架的理解。 一、Lettuce客户端 Lettuce 是一种可扩展的、线程…

Ubuntun使用ISO镜像中的软件包作为本地镜像源

首先下载镜像&#xff1a; https://releases.ubuntu.com/jammy/ubuntu-22.04.3-desktop-amd64.iso 新建本地目录&#xff0c;挂载ISO文件到本地目录 sudo mkdir /media/cdrom sudo mount /mnt/e/iso/ubuntu-22.04.3-desktop-amd64.iso /media/cdrom # 备份镜像源 sudo mv…

Web前端篇——ElementUI的Backtop 不显示问题

在使用ElementUI的Backtop回到顶部组件时&#xff0c;单独复制这一行代码 <el-backtop :right"100" :bottom"100" /> 发现页面在向下滚动时&#xff0c;并未出现Backtop组件。 可从以下3个方向进行分析&#xff1a; 指定target属性&#xff0c;且…

Django文章标签推荐

当博客文章实现了标签后&#xff0c;可以用它们做很多有趣的事情。关于标签的更多内容&#xff0c;请看 Django集成第三方标签功能-CSDN博客 使用标签&#xff0c;我们可以很好地对博客文章进行分类。类似主题的帖子会有几个共同的标签。下一步将构建一个功能&#xff0c;以显…

pytest-yaml 测试平台-4.生成allure报告,报告反馈企业微信、钉钉、飞书通知

前言 定时任务执行完成后生成可视化allure报告&#xff0c;并把结果发到企业微信&#xff0c;钉钉&#xff0c;飞书通知群里。 生成allure报告 添加定时任务 执行完成后生成allure报告 查看报告详情 报告会显示详细的request 和 response 详细信息 也可以查看log日志 …

js中session、cookie、 localStorage和SessionStorage的区别和特点

在 JavaScript 中&#xff0c;session、cookie、localStorage 和 sessionStorage 是用于在客户端存储数据的不同机制。它们在以下几个方面有区别和特点&#xff1a; 1. 生命周期&#xff1a; - Session&#xff1a;session 存储在服务器端&#xff0c;通常使用会话标识符&a…

【胖虎的逆向之路】Android自制Https证书实现双向认证

Android自制Https证书实现双向认证 1.基本概念1.1 HTTP1.2 HTTPS1.3 加密方式1.3.1 对称加密1.3.2 非对称加密 1.4 SSL 功能1.4.1 客户对服务器的身份认证1.4.2 服务器对客户的身份认证1.4.3 建立服务器与客户之间安全的数据通道 1.5 CA 证书 2.证书生成2.1 生成根证书&#xf…

数据结构 模拟实现Queue队列(双链表模拟)

目录 一、队列的概念 二、队列的接口 三、队列的方法实现 &#xff08;1&#xff09;offer方法 &#xff08;2&#xff09;poll方法 &#xff08;3&#xff09;peek方法 &#xff08;4&#xff09;size方法 &#xff08;5&#xff09;isEmpty方法 四、最终代码 一、队…

域名转移:将腾讯云转移至阿里云

当时注册域名时&#xff0c;腾讯域云相对便宜&#xff0c;但目前阿里云在业界更加成熟&#xff0c;因此将自己申请的域名由阿里云转移至阿里云&#xff0c;并记录转移过程。 一、域名转出 进入腾讯云&#xff0c;登陆后选择控制台&#xff0c;选择我的资源–域名注册–全部域名…

快速入门学会tomcat!

快速入门学会tomcat&#xff01; 最新Tomcat下载安装详细教程Tomcat是什么&#xff1f;一、网络协议&#xff0f;网络协议包网络协议包&#xff1a; 二、Http网络协议包&#xff1a;三、Http网络协议包分类&#xff1a;1&#xff0e;Http请求协议包&#xff1a;2&#xff0e;Ht…

Android WiFi基础概览

Android WiFi 基础概览 1、WiFi协议2、Android WLAN 架构2.1 应用框架2.2 Wi-Fi 服务2.3 Wi-Fi HAL 3、相关编译 android13-release 1、WiFi协议 Wi-Fi&#xff08;无线通信技术&#xff09;_百度百科 2.4GHz 频段支持以下标准&#xff08;802.11b/g/n/ax&#xff09;&#xff…

科锐16位汇编学习笔记 04 乘除和移位指令

乘法和除法指令用的不多,因为效率很低 比较指令CMP (compare) •格式&#xff1a;CMP OPD&#xff0c;OPS •功能&#xff1a;(OPD) — (OPS),跟减法指令很像,但是不存结果 •说明&#xff1a;目的操作数减去源操作数&#xff0c;然后根据结果设置标志位&#xff0c;但该结…

作业三详解

作业3: 在作业1的基础上,整合修改、删除功能,可实现如下功能 1.进入新增页面,页面填入新增数据,提交表单,然后跳转到查询列表页面,列表页面显示所有记录(多一条新增的数据) 2.进入修改增页面,页面填入修改数据,提交表单,然后跳转到查询列表页面,列表页面显示所有…

Zoho SalesIQ:构建客户服务知识库的实用工具与指南

客服人员每天都有很多事情要做&#xff0c;包括在线聊天、音频通话、屏幕共享和发送电子邮件。为什么要将搜索常用信息添加到他们列表中呢&#xff1f;因为客户在遇到问题的同时想快速解决问题。所以&#xff0c;我们要使用Zoho SalesIQ客服系统构建客户服务知识库。 一、什么…

鸿蒙开发之拖拽事件

一、拖拽涉及的方法 Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//拖拽开始.onDragStart((event: DragEvent) > {console.log(drag event onDragStartevent.getX())})//拖拽进入组件范围&#xff0c;需要监听onDrop配合.onDragEnter((event: DragEvent) …

【MongoDB】MongoDB查询语句find的使用,和提高查询速度的游标的使用,非常详细!!!

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;MongoDB数据库 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续前…

联合体类型和枚举类型

联合体 联合体类型的声明 像结构体⼀样&#xff0c;联合体也是由⼀个或者多个成员构成&#xff0c;这些成员可以不同的类型。 联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫&#xff1a;共⽤体。 所以给联合体其中⼀个成员赋值&#xff0c;其他成员的值也跟着…

Postman 并发测试入门指南:如何模拟用户并发请求?

背景介绍 最近&#xff0c;我们发起了一个在线图书管理系统的项目。我负责的一个关键模块包括三个主要后台接口&#xff1a; 实现对books数据的检索。实施对likes数据的获取。通过collections端点访问数据。 应对高流量的挑战 在设计并部署接口时&#xff0c;我们不可避免地…