如下的代码: 在Linux中程序有2个关键,一个是标准输出,一个是标准错误,在C语言中,有stderr和stdout。 程序运行截图如下: 如果把标准输出重定向到1.txt文件中:那么屏幕就只会输出stderr 然后把标准错误放到标准输出上这样屏幕就不会打印东西了: 所有的数据都将在1.txt中: 下面来说下这个的作用,本人在搞开发的时候,经常改别人的程序,或者在xx程序中进行二次开发,这样的话就有个问题,大量的打印。 当别人程序里面只有cout作为输出的时候, 自己可以使用qDebug()进行打印,然后把标准输出重定向,这样标准错误就会打印到屏幕上了。 下面问题来了,当那个项目里面又有人cout、qDebug这样改怎么搞,下面提供3个解决思路。 第一个,将qDebug改为stdout,自己使用qInfo或其他几个进行输出。然后就和上面一样了,代码如下: 程序运行截图如下: 这种方式是不是很有用 第二种就不演示了,就提一下。把QtDebugMsg中不提供打印,然后自己用其他几个输出。 第三个:记录到文件中,这里可以加个当前时间,这样就和日志一样了,比如自己用Warning记录到文件里面: 程序源码如下: 程序运行截图如下: 相应的文件: 是不是改别人代码的时候好调试多了。
#include <QCoreApplication> #include <QDebug> #include <QByteArray> #include <iostream> #include <stdio.h> #include <QDebug> using namespace std; int main(int argc, char *argv[]) { cout << "The std cout output msg" << endl; qDebug() << "The qDebug output msg"; qInfo() << "The qInfo output msg"; qWarning() << "The qWarning output msg"; qCritical() << "The qCritical output msg"; qFatal("The qFatal output msg"); return 0; }



#include <QCoreApplication> #include <QDebug> #include <QByteArray> #include <iostream> #include <stdio.h> #include <QDebug> using namespace std; void messageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg){ QByteArray localMsg = msg.toLocal8Bit(); switch(type){ case QtDebugMsg: fprintf(stdout, "qDebug: %s (%s:%u, %s)n", localMsg.constData(), context.file, context.line, context.function); break; case QtInfoMsg: fprintf(stderr, "Info: %s (%s:%u, %s)n", localMsg.constData(), context.file, context.line, context.function); break; case QtWarningMsg: fprintf(stderr, "Warning: %s (%s:%u, %s)n", localMsg.constData(), context.file, context.line, context.function); break; case QtCriticalMsg: fprintf(stderr, "Critical: %s (%s:%u, %s)n", localMsg.constData(), context.file, context.line, context.function); break; case QtFatalMsg: fprintf(stderr, "Fatal: %s (%s:%u, %s)n", localMsg.constData(), context.file, context.line, context.function); abort(); } } int main(int argc, char *argv[]) { qInstallMessageHandler(messageOutput); cout << "The std cout output msg" << endl; qDebug() << "The qDebug output msg"; qInfo() << "The qInfo output msg"; qWarning() << "The qWarning output msg"; qCritical() << "The qCritical output msg"; qFatal("The qFatal output msg"); return 0; }
#include <QCoreApplication> #include <QDebug> #include <QByteArray> #include <iostream> #include <QDateTime> #include <QTextStream> #include <stdio.h> #include <QDebug> #include <QFile> using namespace std; void messageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg){ QByteArray localMsg = msg.toLocal8Bit(); switch(type){ case QtDebugMsg: fprintf(stdout, "qDebug: %s (%s:%u, %s)n", localMsg.constData(), context.file, context.line, context.function); break; case QtInfoMsg: fprintf(stderr, "Info: %s (%s:%u, %s)n", localMsg.constData(), context.file, context.line, context.function); break; case QtWarningMsg: { QFile file("myOut.txt"); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){ break; } QTextStream out(&file); out << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") <<localMsg << "n"; file.close(); } break; case QtCriticalMsg: fprintf(stderr, "Critical: %s (%s:%u, %s)n", localMsg.constData(), context.file, context.line, context.function); break; case QtFatalMsg: fprintf(stderr, "Fatal: %s (%s:%u, %s)n", localMsg.constData(), context.file, context.line, context.function); abort(); } } int main(int argc, char *argv[]) { qInstallMessageHandler(messageOutput); cout << "The std cout output msg" << endl; qDebug() << "The qDebug output msg"; qInfo() << "The qInfo output msg"; qWarning() << "The qWarning output msg"; qCritical() << "The qCritical output msg"; qFatal("The qFatal output msg"); return 0; }

本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
官方软件产品操作指南 (170)