Qt qDebug基本的使用方法详解

news2024/9/23 21:11:27

目录

  • 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.coloradmin.cn/o/1360433.html

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

相关文章

初识大数据,一文掌握大数据必备知识文集(12)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

一文详解动态 Schema

在数据库中&#xff0c;Schema 常有&#xff0c;而动态 Schema 不常有。 例如&#xff0c;SQL 数据库有预定义的 Schema&#xff0c;但这些 Schema 通常都不能修改&#xff0c;用户只有在创建时才能定义 Schema。Schema 的作用是告诉数据库使用者所希望的表结构&#xff0c;确保…

C++ OpenGL 3D GameTutorial 1:Making the window with win32 API学习笔记

视频地址https://www.youtube.com/watch?vjHcz22MDPeE&listPLv8DnRaQOs5-MR-zbP1QUdq5FL0FWqVzg 一、入口函数 首先看入口函数main代码&#xff1a; #include<OGL3D/Game/OGame.h>int main() {OGame game;game.Run();return 0; } 这里交代个关于C语法的问题&#x…

群晖Docker部署HomeAssistant容器结合内网穿透远程控制家中智能设备

目录 一、下载HomeAssistant镜像 二、内网穿透HomeAssistant&#xff0c;实现异地控制智能家居 三、使用固定域名访问HomeAssistant 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站 Ho…

几种常见的CSS三栏布局?介绍下粘性布局(sticky)?自适应布局?左边宽度固定,右边自适应?两种以上方式实现已知或者未知宽度的垂直水平居中?

几种常见的CSS三栏布局 流体布局 效果&#xff1a; 参考代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1…

【elfboard linux 开发板】9. 虚拟机扩容和内核编译

1. 虚拟机扩容 需要将虚拟机的快照全都删除&#xff0c;并且将运行的系统关机点击扩展&#xff0c;改为需要的磁盘大小安装gparted工具 sudo apt-get install gparted 如果报错&#xff0c;则按照出错内容修改&#xff0c;一般是出现下载错误&#xff0c;可以使用下列命令&…

【大数据进阶第三阶段之Hive学习笔记】Hive的数据类型与数据操作

【大数据进阶第三阶段之Hive学习笔记】Hive安装-CSDN博客 【大数据进阶第三阶段之Hive学习笔记】Hive常用命令和属性配置-CSDN博客 【大数据进阶第三阶段之Hive学习笔记】Hive基础入门-CSDN博客 【大数据进阶第三阶段之Hive学习笔记】Hive查询、函数、性能优化-CSDN博客 …

集合-及其各种特征详解

集合 概念&#xff1a;是提供一种存储空间 可变 的存储模型&#xff0c;存储的数据容量可以发生改变。&#xff08;也就是集合容量不固定&#xff09; 集合关系图 绿色的代表接口&#xff0c;蓝色的代表接口的实现类 单列集合 Collection(接口) 概述&#xff1a;单列集合的…

05、Kafka ------ CMAK 各个功能的作用解释(主题和分区 详解,用命令行和图形界面创建主题和查看主题)

目录 CMAK 各个功能的作用解释&#xff08;主题&#xff09;★ 主题★ 分区★ 创建主题&#xff1a;★ 列出和查看主题 CMAK 各个功能的作用解释&#xff08;主题&#xff09; ★ 主题 Kafka 主题虽然也叫 topic&#xff0c;但它和 Pub-Sub 消息模型中 topic 主题及 AMQP 的 t…

安科瑞变电站综合自动化系统在青岛海洋科技园应用——安科瑞 顾烊宇

摘 要&#xff1a;变电站综合自动化系统是将变电站内的二次设备经过功能的组合和优化设计&#xff0c;利用先进的计算机技术、通信技术、信号处理技术&#xff0c;实现对全变电站的主要设备和输、配电线路的自动监视、测量、控制、保护、并与上级调度通信的综合性自动化功能。 …

深入理解Word Embeddings:Word2Vec技术与应用

目录 前言1 Word2Vec概述2 CBOW模型2.1 CBOW模型简介2.2 基于词袋&#xff08;bag of word&#xff09;的假设2.3 One-hot向量编码2.4 分类问题 3 Skip-gram模型3.1 Skip-gram模型简介3.2 目标词预测上下文3.3 词语关联性的捕捉 4 优化Word2Vec模型的方法4.1 负采样和分层softm…

谷歌浏览器启用实时字幕功能

在 Chrome 中使用“实时字幕”功能 - Google Chrome帮助 在 Chrome 中使用“实时字幕”功能 从计算机上的 Chrome 浏览器中&#xff0c;您可以使用“实时字幕”功能自动为视频、播客、游戏、直播、视频通话或其他音频媒体生成字幕。音频和字幕均在本地处理&#xff0c;并会保…

「Verilog学习笔记」编写乘法器求解算法表达式

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule calculation(input clk,input rst_n,input [3:0] a,input [3:0] b,output [8:0] c);reg [8:0] data1, data2 ; assign c data2 ; always (posed…

【Filament】自定义Blinn Phong光照模型

1 前言 光照元素主要有环境光&#xff08;ambient&#xff09;、漫反射光&#xff08;diffuse&#xff09;、镜面反射光&#xff08;specular&#xff09;&#xff0c;基础的光照模型主要有兰伯特&#xff08;Lambert&#xff09;光照模型、冯氏&#xff08;Phong&#xff09;光…

【Vue3+React18+TS4】1-1 : 课程介绍与学习指南

本书目录&#xff1a;点击进入 一、为什么做这样一门课程? 二、本门课的亮点有哪些? 2.1、轻松驾驭 2.2、体系系统 2.3、高效快捷 2.4、融合贯通 三、课程内容包括哪些? 四、项目实战 《在线考勤系统》 五、课适合哪些同学? 一、为什么做这样一门课程? 近十年内前端…

RocketMQ源码 发送消息源码分析

前言 DefaultMQProducer 是默认生产者组件&#xff0c;是生产者客户端中&#xff0c;绝大部分关于生产者和broker、nameSrv进行网络通信的功能入口。其中&#xff0c;包含发送各种形式&#xff08;同步、异步、事务、顺序&#xff09;的消息&#xff0c;针对发送消息部分的实现…

Vue页面传值:Props属性与$emit事件的应用介绍

一、vue页面传值 在Vue页面中传值有多种方式&#xff0c;简单介绍以下两种 通过props属性传递值&#xff1a;父组件在子组件上定义props属性&#xff0c;子组件通过props接收父组件传递的值。通过$emit触发事件传递值&#xff1a;子组件通过$emit方法触发一个自定义事件&#…

Meshlab界面和菜单初步认识

文章目录 界面认识菜单 界面认识 顾名思义&#xff0c;MeshLab即网格实验室&#xff0c;用于处理三维对象&#xff0c;并有着针对网格基于网格操作的各种工具&#xff0c;是一个功能强大的三维几何处理系统。因其开源&#xff0c;直接搜官网下载即可。安装过程无坑&#xff0c…

pycharm调整漂亮的颜色主题

主题样式&#xff1a; 一、设置主题为白色 二、pycharm 如何设置字体颜色 打开pycharm编辑器&#xff0c;file > settings > editor > color scheme > python > 你也可以直接用我资源中的配置好的文件

癌症早筛2023:翻越大山,仍是漫漫征途

撕开一盒试剂盒&#xff0c;拿出采样工具&#xff0c;在采集测试样本后混入试剂&#xff0c;再用试纸测试自身对某种病原体的感染情况。过去一段时间&#xff0c;这个方式帮助很多人尽早明确了新冠、流感、支原体的感染状况&#xff0c;从而加速对症治疗。 也因此&#xff0c;…