首页 > 编程知识 正文

qt中qdebug如何直接运行,qt设置

时间:2023-05-04 15:13:11 阅读:164726 作者:4467

文章目录序言一、qDebug (? 二、用法1 .不引入头文件2 .引入头文件#include 3.关闭自动插入空格4 .关闭引号字符,屏蔽打印转义字符3、扩展1.qdebug ()

前言在二维码的开发过程中,最常用的是qDebug ()吧。 跟踪程序执行前后的流程,打印变量的内容。

一. qDebug (? qDebug ) )函数用于将调试信息直接输出到控制台。

有两种方法可以输出到控制台。

(1)将字符串作为参数传递给qDebug )函数。 (该方法可以不添加头文件#includeQDebug )2)使用流输出的方法输出多个字符串。 与(需要添加#includeQDebug头文件)二、用法1 .如果在不引入头文件的情况下将格式字符串和参数列表传递给函数,则为c语言的printf )函数的行为相同。 格式必须是Latin-1字符串

qdebug(constchar*message,…)

qdebug(constchar*message,) qdebug ) ' %s ',' Hello world!' ); 2 .头文件#include代码部署示例:

#include QDebugqDebug () ' Hello' 'world!' ; qDebug () qstring ' hello world!' ); int x=100; qdebug(x:%d )、x ); //以使用流的方法输出int y=250; qDebug ()、cout、endl )、x: ) x; qDebug () y:' y ) y; 3 .关闭空格q debug q debug :否space (的自动插入

q调试(hello ) world! '; qDebug ().nospace ) ' Hello' 'world! '; 输出: Hello world! hello世界! 4 .关闭引号字符,并且转义字符不会在QChar、QString和QByteArray内容周围自动插入引号字符。 如果启用和禁用引号字符,则这些类型的打印将在没有引号字符的情况下进行,并且不会转义不能打印的字符。

qdebugqdebug :否quote (q debug ) qstring ) ' Helloworld!' ); qDebug ().noquote ) qstring ) ' Helloworld!' ); 输出:'Hello world!' hello世界! q调试q调试:否space (

q调试(hello ) world! '; qDebug ().nospace ) ' Hello' 'world! '; 输出: Hello world! hello世界! 三、扩展qDebug ) )屏蔽打印首先,看看代码

添加defines=Qt _ no _ debug _ output2. q debug和QString转义字符项目文件(.pro )

# includeqcoreapplication # includeqdir # includeqdebug # includeiostreamintmain (int argc,char **argv ) qcoreapplication qum dir=qdir :3360 tonativeseparators (dir ); qDebug () qdebug: ) dir; STD : cout ' cout : ' dir.tostdstring () std:endl; 打印(printf : ); for(autoch:dir ) printf('%c ',ch.toLatin1 ) ); } return app.exec (; )输出如下所示。 你不觉得意外吗?

如果仔细观察,cout和printf是相同的,但只有qDebug () )输出了多余的东西。

qDebug ) )不仅使用引号打印字符串或转换Unicode,还完全打印转义字符。 例如, ' t n

所以,如果您想避免使用上面的***QDebug:noquote () **。

/p>#include <QCoreApplication>#include <QDir>#include <QDebug>#include <iostream> int main(int argc, char **argv){ QCoreApplication app(argc, argv); QString dir = app.applicationDirPath(); dir = QDir::toNativeSeparators(dir); qDebug().noquote() << "qDebug:" << dir; std::cout << "cout: " << dir.toStdString() << std::endl; printf("printf: "); for (auto ch : dir) { printf("%c", ch.toLatin1()); } return app.exec();}

2.qDebug和QString中的中文乱码

下面代码环境,windows下,main.cpp为utf-8+bom,两种编译器msvc+ mingw下执行的不同结果

1. msvc情况一:#include "mainwindow.h"#include <QApplication>#include <QDebug>#include <QTextCodec>//#pragma execution_character_set("utf-8") //注释掉这句int main(int argc, char *argv[]){ QApplication a(argc, argv); QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); QString n2 = QString::fromUtf8("你好马"); QString n("你好"); qDebug()<<"中文"<<n.toStdString().c_str() << n << n2; MainWindow w; w.show(); return a.exec();}

输出如下:

???? ???? "????" "??????"

结果,中文为乱码。

2. msvc情况二:#include "mainwindow.h"#include <QApplication>#include <QDebug>#include <QTextCodec>#pragma execution_character_set("utf-8") //放开这句话int main(int argc, char *argv[]){ QApplication a(argc, argv); QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); QString n2 = QString::fromUtf8("你好马"); QString n("你好"); qDebug()<<"中文"<<n.toStdString().c_str() << n << n2; MainWindow w; w.show(); return a.exec();}

输出如下:

中文 你好 "你好" "你好马"

结果正确。

2. mingw情况下:

结果均正确

乱码总结

QT中还有2个概念非常重要:

源码字符集(the source character set)源码文件是使用何种编码保存的执行字符集(the execution character set)可执行程序内保存的是何种编码(程序执行时内存中字符串编码)

总体来说,解决方法就一个:你必须知道源码的编码和执行的编码。

执行的编码我们也可以这样修改:

#pragma execution_character_set("utf-8")

QT的QString默认情况下只能正确显示UTF-8编码的字符串,因此,我们必须保证,要显示的字符串首先要转换为UTF-8,再进行显示。当然,我们也可以用代码人为的设定QString的编码。

然而,默认情况下,QT的编辑器是GB2312编码,QString是UTF-8编码,这时就会乱码,可以使用下文的方法一,把编码转为QString支持的编码

最简洁的方法就是:把源码改为UTF-8编码,这样不用做任何转换,直接就能正确显示,例如:

QString str="这是汉字";ui->textEdit->append(str);

如果源码为GB2312,QString默认为为UTF-8,这时,要这样写才不会乱码:

QString str= QString::fromLocal8Bit("这是汉字");ui->textEdit->append(str);

这个例子是把本地编码(我们的操作系统得编码大多为GB2312),转换为QString支持的编码。

总结

qDebug() 输出中文乱码,或者qt的编码问题,常常困扰这我们啊。

扩展阅读utf-8 BOM

BOM:byte order mark,定义字节顺序,因为网络传输中分为两种,大头和小头。uft-8不需要bom表明字节顺序,但可以用BOM来表示编码方式,windows就是采用bom来标记文本文件的编码方式的。

bom是为utf-16和utf-32准备的,用于标记字节顺序。微软在utf-8中使用bom是因为这样可以把UTF-8和ASCII等编码区分开来,但这样的文件在windows之外的操作系统里会带来问题。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。