- Qt 助手搜索 qInstallMessageHandle函数
示例如下:
#include <qapplication.h>
#include <stdio.h>
#include <stdlib.h>
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray localMsg = msg.toLocal8Bit();
const char *file = context.file ? context.file : "";
const char *function = context.function ? context.function : "";
switch (type) {
case QtDebugMsg:
fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtInfoMsg:
fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtWarningMsg:
fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtCriticalMsg:
fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtFatalMsg:
fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
}
}
int main(int argc, char **argv)
{
qInstallMessageHandler(myMessageOutput);
QApplication app(argc, argv);
...
return app.exec();
}
- 打印加入到DbgView或终端, 只需要修改代码如下
#include <QCoreApplication>
#include <QDebug>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
class Helper
{
public:
static wchar_t *charToWchar(const char* c)
{
if (!c) return (wchar_t*)"";
wchar_t *m_wchar;
int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);
m_wchar=new wchar_t[len+1];
MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);
m_wchar[len]='\0';
return m_wchar;
}
static char *wcharToChar(const wchar_t* wp)
{
if (!wp) return (char*)"";
char *m_char;
int len= WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),NULL,0,NULL,NULL);
m_char=new char[len+1];
WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),m_char,len,NULL,NULL);
m_char[len]='\0';
return m_char;
}
static wchar_t *qStringToWchar(const QString &v)
{
return charToWchar(v.toStdString().c_str());
}
static char *qStringToChar(const QString &v)
{
return wcharToChar(v.toStdWString().c_str());
}
static LPWSTR qStringToLPWSTR(const QString &v)
{
return (LPWSTR)qStringToWchar(v);
}
static QString wcharToqString(const wchar_t *v)
{
if (!v) return "";
return QString::fromStdWString(v);
}
static QString charToqString(const char *v)
{
if (!v) return "";
return QString::fromStdString(v);
}
};
void windowsPrint(const QString &text);
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray localMsg = msg.toLocal8Bit();
QString text;
const char *file = context.file ? context.file : "";
const char *function = context.function ? context.function : "";
switch (type) {
case QtDebugMsg:
text.append("[Debug]");
//fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtInfoMsg:
// text.append("[Info]");
//fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtWarningMsg:
text.append("[Warn]");
// fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtCriticalMsg:
// fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtFatalMsg:
text.append("[Fatal]");
// fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
}
text.append(QString(" : %1 (%2:%3, %4)\n")
.arg(localMsg.constData())
.arg(file)
.arg(context.line)
.arg(function)
);
windowsPrint(text);
}
void windowsPrint(const QString &text)
{
OutputDebugString(Helper::qStringToLPWSTR(text));
}
int main(int argc, char *argv[])
{
qInstallMessageHandler(myMessageOutput);
QCoreApplication a(argc, argv);
qDebug() << "TEST 1";
qWarning() << "TEST 2";
return a.exec();
}
- 效果示例
版权声明:本文为halo_hsuh原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。