Reshuffle code between qglobal, qlogging
Make the content of the .h, .cpp files match. Change-Id: Ib2506aeff74281ec4bcbf04d21da451038391203 Reviewed-by: David Faure <faure@kde.org>
This commit is contained in:
parent
d4441b0148
commit
23688d8942
@ -45,15 +45,12 @@
|
|||||||
#include "qlist.h"
|
#include "qlist.h"
|
||||||
#include "qthreadstorage.h"
|
#include "qthreadstorage.h"
|
||||||
#include "qdir.h"
|
#include "qdir.h"
|
||||||
#include "qstringlist.h"
|
|
||||||
#include "qdatetime.h"
|
#include "qdatetime.h"
|
||||||
#include "qdebug.h"
|
|
||||||
|
|
||||||
#ifndef QT_NO_QOBJECT
|
#ifndef QT_NO_QOBJECT
|
||||||
#include <private/qthread_p.h>
|
#include <private/qthread_p.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
@ -677,34 +674,6 @@ QT_BEGIN_NAMESPACE
|
|||||||
\sa quintptr, qint32, qint64
|
\sa quintptr, qint32, qint64
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
|
||||||
\typedef QtMsgHandler
|
|
||||||
\relates <QtGlobal>
|
|
||||||
\deprecated
|
|
||||||
|
|
||||||
This is a typedef for a pointer to a function with the following
|
|
||||||
signature:
|
|
||||||
|
|
||||||
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 7
|
|
||||||
|
|
||||||
This typedef is deprecated, you should use QMessageHandler instead.
|
|
||||||
\sa QtMsgType, QMessageHandler, qInstallMsgHandler(), qInstallMessageHandler()
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\typedef QMessageHandler
|
|
||||||
\relates <QtGlobal>
|
|
||||||
\since 5.0
|
|
||||||
|
|
||||||
This is a typedef for a pointer to a function with the following
|
|
||||||
signature:
|
|
||||||
|
|
||||||
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 49
|
|
||||||
|
|
||||||
\sa QtMsgType, qInstallMessageHandler()
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\enum QtMsgType
|
\enum QtMsgType
|
||||||
\relates <QtGlobal>
|
\relates <QtGlobal>
|
||||||
@ -1726,9 +1695,6 @@ Q_CORE_EXPORT unsigned int qt_int_sqrt(unsigned int n)
|
|||||||
void *qMemCopy(void *dest, const void *src, size_t n) { return memcpy(dest, src, n); }
|
void *qMemCopy(void *dest, const void *src, size_t n) { return memcpy(dest, src, n); }
|
||||||
void *qMemSet(void *dest, int c, size_t n) { return memset(dest, c, n); }
|
void *qMemSet(void *dest, int c, size_t n) { return memset(dest, c, n); }
|
||||||
|
|
||||||
static QtMsgHandler msgHandler = 0; // pointer to debug handler (without context)
|
|
||||||
static QMessageHandler messageHandler = 0; // pointer to debug handler (with context)
|
|
||||||
|
|
||||||
#if !defined(Q_OS_WIN) && !defined(QT_NO_THREAD) && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX) && \
|
#if !defined(Q_OS_WIN) && !defined(QT_NO_THREAD) && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX) && \
|
||||||
defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L
|
defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L
|
||||||
namespace {
|
namespace {
|
||||||
@ -1808,439 +1774,6 @@ QString qt_error_string(int errorCode)
|
|||||||
return ret.trimmed();
|
return ret.trimmed();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
\fn QtMsgHandler qInstallMsgHandler(QtMsgHandler handler)
|
|
||||||
\relates <QtGlobal>
|
|
||||||
\deprecated
|
|
||||||
|
|
||||||
Installs a Qt message \a handler which has been defined
|
|
||||||
previously. This method is deprecated, use qInstallMessageHandler
|
|
||||||
instead.
|
|
||||||
|
|
||||||
\sa QtMsgHandler, qInstallMessageHandler
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\fn QMessageHandler qInstallMessageHandler(QMessageHandler handler)
|
|
||||||
\relates <QtGlobal>
|
|
||||||
\since 5.0
|
|
||||||
|
|
||||||
Installs a Qt message \a handler which has been defined
|
|
||||||
previously. Returns a pointer to the previous message handler
|
|
||||||
(which may be 0).
|
|
||||||
|
|
||||||
The message handler is a function that prints out debug messages,
|
|
||||||
warnings, critical and fatal error messages. The Qt library (debug
|
|
||||||
mode) contains hundreds of warning messages that are printed
|
|
||||||
when internal errors (usually invalid function arguments)
|
|
||||||
occur. Qt built in release mode also contains such warnings unless
|
|
||||||
QT_NO_WARNING_OUTPUT and/or QT_NO_DEBUG_OUTPUT have been set during
|
|
||||||
compilation. If you implement your own message handler, you get total
|
|
||||||
control of these messages.
|
|
||||||
|
|
||||||
The default message handler prints the message to the standard
|
|
||||||
output under X11 or to the debugger under Windows. If it is a
|
|
||||||
fatal message, the application aborts immediately.
|
|
||||||
|
|
||||||
Only one message handler can be defined, since this is usually
|
|
||||||
done on an application-wide basis to control debug output.
|
|
||||||
|
|
||||||
To restore the message handler, call \c qInstallMessageHandler(0).
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 23
|
|
||||||
|
|
||||||
\sa qDebug(), qWarning(), qCritical(), qFatal(), QtMsgType,
|
|
||||||
{Debugging Techniques}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
|
|
||||||
extern bool usingWinMain;
|
|
||||||
extern Q_CORE_EXPORT void qWinMsgHandler(QtMsgType t, const char *str);
|
|
||||||
extern Q_CORE_EXPORT void qWinMessageHandler(QtMsgType t, const QMessageLogContext &context,
|
|
||||||
const char *str);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// defined in qlogging.cpp
|
|
||||||
extern Q_CORE_EXPORT QByteArray qMessageFormatString(QtMsgType type, const QMessageLogContext &context,
|
|
||||||
const char *str);
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\internal
|
|
||||||
*/
|
|
||||||
static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &context, const char *buf)
|
|
||||||
{
|
|
||||||
QByteArray logMessage = qMessageFormatString(type, context, buf);
|
|
||||||
#if defined(Q_OS_WINCE)
|
|
||||||
QString fstr = QString::fromLocal8Bit(logMessage);
|
|
||||||
OutputDebugString(reinterpret_cast<const wchar_t *> (fstr.utf16()));
|
|
||||||
#else
|
|
||||||
fprintf(stderr, "%s", logMessage.constData());
|
|
||||||
fflush(stderr);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\internal
|
|
||||||
*/
|
|
||||||
static void qDefaultMsgHandler(QtMsgType type, const char *buf)
|
|
||||||
{
|
|
||||||
QMessageLogContext emptyContext;
|
|
||||||
qDefaultMessageHandler(type, emptyContext, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
QMessageHandler qInstallMessageHandler(QMessageHandler h)
|
|
||||||
{
|
|
||||||
if (!messageHandler)
|
|
||||||
messageHandler = qDefaultMessageHandler;
|
|
||||||
QMessageHandler old = messageHandler;
|
|
||||||
messageHandler = h;
|
|
||||||
#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
|
|
||||||
if (!messageHandler && usingWinMain)
|
|
||||||
messageHandler = qWinMessageHandler;
|
|
||||||
#endif
|
|
||||||
return old;
|
|
||||||
}
|
|
||||||
|
|
||||||
QtMsgHandler qInstallMsgHandler(QtMsgHandler h)
|
|
||||||
{
|
|
||||||
//if handler is 0, set it to the
|
|
||||||
//default message handler
|
|
||||||
if (!msgHandler)
|
|
||||||
msgHandler = qDefaultMsgHandler;
|
|
||||||
QtMsgHandler old = msgHandler;
|
|
||||||
msgHandler = h;
|
|
||||||
#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
|
|
||||||
if (!msgHandler && usingWinMain)
|
|
||||||
msgHandler = qWinMsgHandler;
|
|
||||||
#endif
|
|
||||||
return old;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\internal
|
|
||||||
*/
|
|
||||||
void qt_message_output(QtMsgType msgType, const QMessageLogContext &context, const char *buf)
|
|
||||||
{
|
|
||||||
if (!msgHandler)
|
|
||||||
msgHandler = qDefaultMsgHandler;
|
|
||||||
if (!messageHandler)
|
|
||||||
messageHandler = qDefaultMessageHandler;
|
|
||||||
|
|
||||||
// prefer new message handler over the old one
|
|
||||||
if (msgHandler == qDefaultMsgHandler
|
|
||||||
|| messageHandler != qDefaultMessageHandler) {
|
|
||||||
(*messageHandler)(msgType, context, buf);
|
|
||||||
} else {
|
|
||||||
(*msgHandler)(msgType, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msgType == QtFatalMsg
|
|
||||||
|| (msgType == QtWarningMsg
|
|
||||||
&& (!qgetenv("QT_FATAL_WARNINGS").isNull())) ) {
|
|
||||||
|
|
||||||
#if defined(Q_CC_MSVC) && defined(QT_DEBUG) && defined(_DEBUG) && defined(_CRT_ERROR)
|
|
||||||
// get the current report mode
|
|
||||||
int reportMode = _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW);
|
|
||||||
_CrtSetReportMode(_CRT_ERROR, reportMode);
|
|
||||||
#if !defined(Q_OS_WINCE)
|
|
||||||
int ret = _CrtDbgReport(_CRT_ERROR, __FILE__, __LINE__, QT_VERSION_STR, buf);
|
|
||||||
#else
|
|
||||||
int ret = _CrtDbgReportW(_CRT_ERROR, _CRT_WIDE(__FILE__),
|
|
||||||
__LINE__, _CRT_WIDE(QT_VERSION_STR), reinterpret_cast<const wchar_t *> (QString::fromLatin1(buf).utf16()));
|
|
||||||
#endif
|
|
||||||
if (ret == 0 && reportMode & _CRTDBG_MODE_WNDW)
|
|
||||||
return; // ignore
|
|
||||||
else if (ret == 1)
|
|
||||||
_CrtDbgBreak();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (defined(Q_OS_UNIX) || defined(Q_CC_MINGW))
|
|
||||||
abort(); // trap; generates core dump
|
|
||||||
#else
|
|
||||||
exit(1); // goodbye cruel world
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#if !defined(QT_NO_EXCEPTIONS)
|
|
||||||
/*!
|
|
||||||
\internal
|
|
||||||
Uses a local buffer to output the message. Not locale safe + cuts off
|
|
||||||
everything after character 255, but will work in out of memory situations.
|
|
||||||
*/
|
|
||||||
static void qEmergencyOut(QtMsgType msgType, const char *msg, va_list ap)
|
|
||||||
{
|
|
||||||
char emergency_buf[256] = { '\0' };
|
|
||||||
emergency_buf[255] = '\0';
|
|
||||||
if (msg)
|
|
||||||
qvsnprintf(emergency_buf, 255, msg, ap);
|
|
||||||
QMessageLogContext context;
|
|
||||||
qt_message_output(msgType, context, emergency_buf);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\internal
|
|
||||||
*/
|
|
||||||
static void qt_message(QtMsgType msgType, const QMessageLogContext &context, const char *msg, va_list ap)
|
|
||||||
{
|
|
||||||
#if !defined(QT_NO_EXCEPTIONS)
|
|
||||||
if (std::uncaught_exception()) {
|
|
||||||
qEmergencyOut(msgType, msg, ap);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
QByteArray buf;
|
|
||||||
if (msg) {
|
|
||||||
QT_TRY {
|
|
||||||
buf = QString().vsprintf(msg, ap).toLocal8Bit();
|
|
||||||
} QT_CATCH(const std::bad_alloc &) {
|
|
||||||
#if !defined(QT_NO_EXCEPTIONS)
|
|
||||||
qEmergencyOut(msgType, msg, ap);
|
|
||||||
// don't rethrow - we use qWarning and friends in destructors.
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
qt_message_output(msgType, context, buf.constData());
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef qDebug
|
|
||||||
/*!
|
|
||||||
\fn qDebug(const char *message, ...)
|
|
||||||
\relates <QtGlobal>
|
|
||||||
|
|
||||||
Calls the message handler with the debug message \a msg. If no
|
|
||||||
message handler has been installed, the message is printed to
|
|
||||||
stderr. Under Windows, the message is sent to the console, if it is a
|
|
||||||
console application; otherwise, it is sent to the debugger. This
|
|
||||||
function does nothing if \c QT_NO_DEBUG_OUTPUT was defined
|
|
||||||
during compilation.
|
|
||||||
|
|
||||||
If you pass the function a format string and a list of arguments,
|
|
||||||
it works in similar way to the C printf() function. The format
|
|
||||||
should be a Latin-1 string.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 24
|
|
||||||
|
|
||||||
If you include \c <QtDebug>, a more convenient syntax is also
|
|
||||||
available:
|
|
||||||
|
|
||||||
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 25
|
|
||||||
|
|
||||||
With this syntax, the function returns a QDebug object that is
|
|
||||||
configured to use the QtDebugMsg message type. It automatically
|
|
||||||
puts a single space between each item, and outputs a newline at
|
|
||||||
the end. It supports many C++ and Qt types.
|
|
||||||
|
|
||||||
To suppress the output at run-time, install your own message handler
|
|
||||||
with qInstallMessageHandler().
|
|
||||||
|
|
||||||
\sa qWarning(), qCritical(), qFatal(), qInstallMessageHandler(),
|
|
||||||
{Debugging Techniques}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void QMessageLogger::debug(const char *msg, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, msg); // use variable arg list
|
|
||||||
qt_message(QtDebugMsg, context, msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef QT_NO_DEBUG_STREAM
|
|
||||||
|
|
||||||
QDebug QMessageLogger::debug()
|
|
||||||
{
|
|
||||||
QDebug dbg = QDebug(QtDebugMsg);
|
|
||||||
QMessageLogContext &ctxt = dbg.stream->context;
|
|
||||||
ctxt.file = context.file;
|
|
||||||
ctxt.line = context.line;
|
|
||||||
ctxt.function = context.function;
|
|
||||||
return dbg;
|
|
||||||
}
|
|
||||||
|
|
||||||
QNoDebug QMessageLogger::noDebug()
|
|
||||||
{
|
|
||||||
return QNoDebug();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#undef qWarning
|
|
||||||
/*!
|
|
||||||
\fn qWarning(const char *message, ...)
|
|
||||||
\relates <QtGlobal>
|
|
||||||
|
|
||||||
Calls the message handler with the warning message \a msg. If no
|
|
||||||
message handler has been installed, the message is printed to
|
|
||||||
stderr. Under Windows, the message is sent to the debugger. This
|
|
||||||
function does nothing if \c QT_NO_WARNING_OUTPUT was defined
|
|
||||||
during compilation; it exits if the environment variable \c
|
|
||||||
QT_FATAL_WARNINGS is defined.
|
|
||||||
|
|
||||||
This function takes a format string and a list of arguments,
|
|
||||||
similar to the C printf() function. The format should be a Latin-1
|
|
||||||
string.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 26
|
|
||||||
|
|
||||||
If you include <QtDebug>, a more convenient syntax is
|
|
||||||
also available:
|
|
||||||
|
|
||||||
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 27
|
|
||||||
|
|
||||||
This syntax inserts a space between each item, and
|
|
||||||
appends a newline at the end.
|
|
||||||
|
|
||||||
To suppress the output at runtime, install your own message handler
|
|
||||||
with qInstallMessageHandler().
|
|
||||||
|
|
||||||
\sa qDebug(), qCritical(), qFatal(), qInstallMessageHandler(),
|
|
||||||
{Debugging Techniques}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void QMessageLogger::warning(const char *msg, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, msg); // use variable arg list
|
|
||||||
qt_message(QtWarningMsg, context, msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef QT_NO_DEBUG_STREAM
|
|
||||||
QDebug QMessageLogger::warning()
|
|
||||||
{
|
|
||||||
QDebug dbg = QDebug(QtWarningMsg);
|
|
||||||
QMessageLogContext &ctxt = dbg.stream->context;
|
|
||||||
ctxt.file = context.file;
|
|
||||||
ctxt.line = context.line;
|
|
||||||
ctxt.function = context.function;
|
|
||||||
return dbg;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#undef qCritical
|
|
||||||
/*!
|
|
||||||
\fn qCritical(const char *message, ...)
|
|
||||||
\relates <QtGlobal>
|
|
||||||
|
|
||||||
Calls the message handler with the critical message \a msg. If no
|
|
||||||
message handler has been installed, the message is printed to
|
|
||||||
stderr. Under Windows, the message is sent to the debugger.
|
|
||||||
|
|
||||||
This function takes a format string and a list of arguments,
|
|
||||||
similar to the C printf() function. The format should be a Latin-1
|
|
||||||
string.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 28
|
|
||||||
|
|
||||||
If you include <QtDebug>, a more convenient syntax is
|
|
||||||
also available:
|
|
||||||
|
|
||||||
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 29
|
|
||||||
|
|
||||||
A space is inserted between the items, and a newline is
|
|
||||||
appended at the end.
|
|
||||||
|
|
||||||
To suppress the output at runtime, install your own message handler
|
|
||||||
with qInstallMessageHandler().
|
|
||||||
|
|
||||||
\sa qDebug(), qWarning(), qFatal(), qInstallMessageHandler(),
|
|
||||||
{Debugging Techniques}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void QMessageLogger::critical(const char *msg, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, msg); // use variable arg list
|
|
||||||
qt_message(QtCriticalMsg, context, msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef QT_NO_DEBUG_STREAM
|
|
||||||
QDebug QMessageLogger::critical()
|
|
||||||
{
|
|
||||||
QDebug dbg = QDebug(QtCriticalMsg);
|
|
||||||
QMessageLogContext &ctxt = dbg.stream->context;
|
|
||||||
ctxt.file = context.file;
|
|
||||||
ctxt.line = context.line;
|
|
||||||
ctxt.function = context.function;
|
|
||||||
return dbg;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void qErrnoWarning(const char *msg, ...)
|
|
||||||
{
|
|
||||||
// qt_error_string() will allocate anyway, so we don't have
|
|
||||||
// to be careful here (like we do in plain qWarning())
|
|
||||||
QString buf;
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, msg);
|
|
||||||
if (msg)
|
|
||||||
buf.vsprintf(msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
QMessageLogger().critical("%s (%s)", buf.toLocal8Bit().constData(),
|
|
||||||
qt_error_string(-1).toLocal8Bit().constData());
|
|
||||||
}
|
|
||||||
|
|
||||||
void qErrnoWarning(int code, const char *msg, ...)
|
|
||||||
{
|
|
||||||
// qt_error_string() will allocate anyway, so we don't have
|
|
||||||
// to be careful here (like we do in plain qWarning())
|
|
||||||
QString buf;
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, msg);
|
|
||||||
if (msg)
|
|
||||||
buf.vsprintf(msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
QMessageLogger().critical("%s (%s)", buf.toLocal8Bit().constData(),
|
|
||||||
qt_error_string(code).toLocal8Bit().constData());
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef qFatal
|
|
||||||
/*!
|
|
||||||
\fn qFatal(const char *message, ...)
|
|
||||||
\relates <QtGlobal>
|
|
||||||
|
|
||||||
Calls the message handler with the fatal message \a msg. If no
|
|
||||||
message handler has been installed, the message is printed to
|
|
||||||
stderr. Under Windows, the message is sent to the debugger.
|
|
||||||
|
|
||||||
If you are using the \bold{default message handler} this function will
|
|
||||||
abort on Unix systems to create a core dump. On Windows, for debug builds,
|
|
||||||
this function will report a _CRT_ERROR enabling you to connect a debugger
|
|
||||||
to the application.
|
|
||||||
|
|
||||||
This function takes a format string and a list of arguments,
|
|
||||||
similar to the C printf() function.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 30
|
|
||||||
|
|
||||||
To suppress the output at runtime, install your own message handler
|
|
||||||
with qInstallMessageHandler().
|
|
||||||
|
|
||||||
\sa qDebug(), qCritical(), qWarning(), qInstallMessageHandler(),
|
|
||||||
{Debugging Techniques}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void QMessageLogger::fatal(const char *msg, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, msg); // use variable arg list
|
|
||||||
qt_message(QtFatalMsg, context, msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
// getenv is declared as deprecated in VS2005. This function
|
// getenv is declared as deprecated in VS2005. This function
|
||||||
// makes use of the new secure getenv function.
|
// makes use of the new secure getenv function.
|
||||||
/*!
|
/*!
|
||||||
|
@ -992,10 +992,6 @@ inline void qUnused(T &x) { (void)x; }
|
|||||||
|
|
||||||
class QString;
|
class QString;
|
||||||
Q_CORE_EXPORT QString qt_error_string(int errorCode = -1);
|
Q_CORE_EXPORT QString qt_error_string(int errorCode = -1);
|
||||||
|
|
||||||
Q_CORE_EXPORT void qErrnoWarning(int code, const char *msg, ...);
|
|
||||||
Q_CORE_EXPORT void qErrnoWarning(const char *msg, ...);
|
|
||||||
|
|
||||||
Q_CORE_EXPORT void qt_assert(const char *assertion, const char *file, int line);
|
Q_CORE_EXPORT void qt_assert(const char *assertion, const char *file, int line);
|
||||||
|
|
||||||
#if !defined(Q_ASSERT)
|
#if !defined(Q_ASSERT)
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#include "qbytearray.h"
|
#include "qbytearray.h"
|
||||||
#include "qstring.h"
|
#include "qstring.h"
|
||||||
#include "qvarlengtharray.h"
|
#include "qvarlengtharray.h"
|
||||||
|
#include "qdebug.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
@ -79,6 +80,254 @@ QT_BEGIN_NAMESPACE
|
|||||||
\sa QMessageLogContext, qDebug(), qWarning(), qCritical(), qFatal()
|
\sa QMessageLogContext, qDebug(), qWarning(), qCritical(), qFatal()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if !defined(QT_NO_EXCEPTIONS)
|
||||||
|
/*!
|
||||||
|
\internal
|
||||||
|
Uses a local buffer to output the message. Not locale safe + cuts off
|
||||||
|
everything after character 255, but will work in out of memory situations.
|
||||||
|
*/
|
||||||
|
static void qEmergencyOut(QtMsgType msgType, const char *msg, va_list ap)
|
||||||
|
{
|
||||||
|
char emergency_buf[256] = { '\0' };
|
||||||
|
emergency_buf[255] = '\0';
|
||||||
|
if (msg)
|
||||||
|
qvsnprintf(emergency_buf, 255, msg, ap);
|
||||||
|
QMessageLogContext context;
|
||||||
|
qt_message_output(msgType, context, emergency_buf);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\internal
|
||||||
|
*/
|
||||||
|
static void qt_message(QtMsgType msgType, const QMessageLogContext &context, const char *msg,
|
||||||
|
va_list ap)
|
||||||
|
{
|
||||||
|
#if !defined(QT_NO_EXCEPTIONS)
|
||||||
|
if (std::uncaught_exception()) {
|
||||||
|
qEmergencyOut(msgType, msg, ap);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
QByteArray buf;
|
||||||
|
if (msg) {
|
||||||
|
QT_TRY {
|
||||||
|
buf = QString().vsprintf(msg, ap).toLocal8Bit();
|
||||||
|
} QT_CATCH(const std::bad_alloc &) {
|
||||||
|
#if !defined(QT_NO_EXCEPTIONS)
|
||||||
|
qEmergencyOut(msgType, msg, ap);
|
||||||
|
// don't rethrow - we use qWarning and friends in destructors.
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qt_message_output(msgType, context, buf.constData());
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef qDebug
|
||||||
|
/*!
|
||||||
|
\fn qDebug(const char *message, ...)
|
||||||
|
\relates <QtGlobal>
|
||||||
|
|
||||||
|
Calls the message handler with the debug message \a msg. If no
|
||||||
|
message handler has been installed, the message is printed to
|
||||||
|
stderr. Under Windows, the message is sent to the console, if it is a
|
||||||
|
console application; otherwise, it is sent to the debugger. This
|
||||||
|
function does nothing if \c QT_NO_DEBUG_OUTPUT was defined
|
||||||
|
during compilation.
|
||||||
|
|
||||||
|
If you pass the function a format string and a list of arguments,
|
||||||
|
it works in similar way to the C printf() function. The format
|
||||||
|
should be a Latin-1 string.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 24
|
||||||
|
|
||||||
|
If you include \c <QtDebug>, a more convenient syntax is also
|
||||||
|
available:
|
||||||
|
|
||||||
|
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 25
|
||||||
|
|
||||||
|
With this syntax, the function returns a QDebug object that is
|
||||||
|
configured to use the QtDebugMsg message type. It automatically
|
||||||
|
puts a single space between each item, and outputs a newline at
|
||||||
|
the end. It supports many C++ and Qt types.
|
||||||
|
|
||||||
|
To suppress the output at run-time, install your own message handler
|
||||||
|
with qInstallMessageHandler().
|
||||||
|
|
||||||
|
\sa qWarning(), qCritical(), qFatal(), qInstallMessageHandler(),
|
||||||
|
{Debugging Techniques}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void QMessageLogger::debug(const char *msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, msg); // use variable arg list
|
||||||
|
qt_message(QtDebugMsg, context, msg, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef QT_NO_DEBUG_STREAM
|
||||||
|
|
||||||
|
QDebug QMessageLogger::debug()
|
||||||
|
{
|
||||||
|
QDebug dbg = QDebug(QtDebugMsg);
|
||||||
|
QMessageLogContext &ctxt = dbg.stream->context;
|
||||||
|
ctxt.file = context.file;
|
||||||
|
ctxt.line = context.line;
|
||||||
|
ctxt.function = context.function;
|
||||||
|
return dbg;
|
||||||
|
}
|
||||||
|
|
||||||
|
QNoDebug QMessageLogger::noDebug()
|
||||||
|
{
|
||||||
|
return QNoDebug();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef qWarning
|
||||||
|
/*!
|
||||||
|
\fn qWarning(const char *message, ...)
|
||||||
|
\relates <QtGlobal>
|
||||||
|
|
||||||
|
Calls the message handler with the warning message \a msg. If no
|
||||||
|
message handler has been installed, the message is printed to
|
||||||
|
stderr. Under Windows, the message is sent to the debugger. This
|
||||||
|
function does nothing if \c QT_NO_WARNING_OUTPUT was defined
|
||||||
|
during compilation; it exits if the environment variable \c
|
||||||
|
QT_FATAL_WARNINGS is defined.
|
||||||
|
|
||||||
|
This function takes a format string and a list of arguments,
|
||||||
|
similar to the C printf() function. The format should be a Latin-1
|
||||||
|
string.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 26
|
||||||
|
|
||||||
|
If you include <QtDebug>, a more convenient syntax is
|
||||||
|
also available:
|
||||||
|
|
||||||
|
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 27
|
||||||
|
|
||||||
|
This syntax inserts a space between each item, and
|
||||||
|
appends a newline at the end.
|
||||||
|
|
||||||
|
To suppress the output at runtime, install your own message handler
|
||||||
|
with qInstallMessageHandler().
|
||||||
|
|
||||||
|
\sa qDebug(), qCritical(), qFatal(), qInstallMessageHandler(),
|
||||||
|
{Debugging Techniques}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void QMessageLogger::warning(const char *msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, msg); // use variable arg list
|
||||||
|
qt_message(QtWarningMsg, context, msg, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef QT_NO_DEBUG_STREAM
|
||||||
|
QDebug QMessageLogger::warning()
|
||||||
|
{
|
||||||
|
QDebug dbg = QDebug(QtWarningMsg);
|
||||||
|
QMessageLogContext &ctxt = dbg.stream->context;
|
||||||
|
ctxt.file = context.file;
|
||||||
|
ctxt.line = context.line;
|
||||||
|
ctxt.function = context.function;
|
||||||
|
return dbg;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef qCritical
|
||||||
|
/*!
|
||||||
|
\fn qCritical(const char *message, ...)
|
||||||
|
\relates <QtGlobal>
|
||||||
|
|
||||||
|
Calls the message handler with the critical message \a msg. If no
|
||||||
|
message handler has been installed, the message is printed to
|
||||||
|
stderr. Under Windows, the message is sent to the debugger.
|
||||||
|
|
||||||
|
This function takes a format string and a list of arguments,
|
||||||
|
similar to the C printf() function. The format should be a Latin-1
|
||||||
|
string.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 28
|
||||||
|
|
||||||
|
If you include <QtDebug>, a more convenient syntax is
|
||||||
|
also available:
|
||||||
|
|
||||||
|
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 29
|
||||||
|
|
||||||
|
A space is inserted between the items, and a newline is
|
||||||
|
appended at the end.
|
||||||
|
|
||||||
|
To suppress the output at runtime, install your own message handler
|
||||||
|
with qInstallMessageHandler().
|
||||||
|
|
||||||
|
\sa qDebug(), qWarning(), qFatal(), qInstallMessageHandler(),
|
||||||
|
{Debugging Techniques}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void QMessageLogger::critical(const char *msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, msg); // use variable arg list
|
||||||
|
qt_message(QtCriticalMsg, context, msg, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef QT_NO_DEBUG_STREAM
|
||||||
|
QDebug QMessageLogger::critical()
|
||||||
|
{
|
||||||
|
QDebug dbg = QDebug(QtCriticalMsg);
|
||||||
|
QMessageLogContext &ctxt = dbg.stream->context;
|
||||||
|
ctxt.file = context.file;
|
||||||
|
ctxt.line = context.line;
|
||||||
|
ctxt.function = context.function;
|
||||||
|
return dbg;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef qFatal
|
||||||
|
/*!
|
||||||
|
\fn qFatal(const char *message, ...)
|
||||||
|
\relates <QtGlobal>
|
||||||
|
|
||||||
|
Calls the message handler with the fatal message \a msg. If no
|
||||||
|
message handler has been installed, the message is printed to
|
||||||
|
stderr. Under Windows, the message is sent to the debugger.
|
||||||
|
|
||||||
|
If you are using the \bold{default message handler} this function will
|
||||||
|
abort on Unix systems to create a core dump. On Windows, for debug builds,
|
||||||
|
this function will report a _CRT_ERROR enabling you to connect a debugger
|
||||||
|
to the application.
|
||||||
|
|
||||||
|
This function takes a format string and a list of arguments,
|
||||||
|
similar to the C printf() function.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 30
|
||||||
|
|
||||||
|
To suppress the output at runtime, install your own message handler
|
||||||
|
with qInstallMessageHandler().
|
||||||
|
|
||||||
|
\sa qDebug(), qCritical(), qWarning(), qInstallMessageHandler(),
|
||||||
|
{Debugging Techniques}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void QMessageLogger::fatal(const char *msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, msg); // use variable arg list
|
||||||
|
qt_message(QtFatalMsg, context, msg, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\internal
|
\internal
|
||||||
*/
|
*/
|
||||||
@ -345,7 +594,7 @@ Q_GLOBAL_STATIC(QMessagePattern, qMessagePattern)
|
|||||||
\internal
|
\internal
|
||||||
*/
|
*/
|
||||||
Q_CORE_EXPORT QByteArray qMessageFormatString(QtMsgType type, const QMessageLogContext &context,
|
Q_CORE_EXPORT QByteArray qMessageFormatString(QtMsgType type, const QMessageLogContext &context,
|
||||||
const char *str)
|
const char *str)
|
||||||
{
|
{
|
||||||
QByteArray message;
|
QByteArray message;
|
||||||
|
|
||||||
@ -389,4 +638,218 @@ Q_CORE_EXPORT QByteArray qMessageFormatString(QtMsgType type, const QMessageLogC
|
|||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QtMsgHandler msgHandler = 0; // pointer to debug handler (without context)
|
||||||
|
static QMessageHandler messageHandler = 0; // pointer to debug handler (with context)
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\internal
|
||||||
|
*/
|
||||||
|
static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &context,
|
||||||
|
const char *buf)
|
||||||
|
{
|
||||||
|
QByteArray logMessage = qMessageFormatString(type, context, buf);
|
||||||
|
#if defined(Q_OS_WINCE)
|
||||||
|
QString fstr = QString::fromLocal8Bit(logMessage);
|
||||||
|
OutputDebugString(reinterpret_cast<const wchar_t *> (fstr.utf16()));
|
||||||
|
#else
|
||||||
|
fprintf(stderr, "%s", logMessage.constData());
|
||||||
|
fflush(stderr);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\internal
|
||||||
|
*/
|
||||||
|
static void qDefaultMsgHandler(QtMsgType type, const char *buf)
|
||||||
|
{
|
||||||
|
QMessageLogContext emptyContext;
|
||||||
|
qDefaultMessageHandler(type, emptyContext, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\internal
|
||||||
|
*/
|
||||||
|
void qt_message_output(QtMsgType msgType, const QMessageLogContext &context, const char *buf)
|
||||||
|
{
|
||||||
|
if (!msgHandler)
|
||||||
|
msgHandler = qDefaultMsgHandler;
|
||||||
|
if (!messageHandler)
|
||||||
|
messageHandler = qDefaultMessageHandler;
|
||||||
|
|
||||||
|
// prefer new message handler over the old one
|
||||||
|
if (msgHandler == qDefaultMsgHandler
|
||||||
|
|| messageHandler != qDefaultMessageHandler) {
|
||||||
|
(*messageHandler)(msgType, context, buf);
|
||||||
|
} else {
|
||||||
|
(*msgHandler)(msgType, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msgType == QtFatalMsg
|
||||||
|
|| (msgType == QtWarningMsg
|
||||||
|
&& (!qgetenv("QT_FATAL_WARNINGS").isNull())) ) {
|
||||||
|
|
||||||
|
#if defined(Q_CC_MSVC) && defined(QT_DEBUG) && defined(_DEBUG) && defined(_CRT_ERROR)
|
||||||
|
// get the current report mode
|
||||||
|
int reportMode = _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW);
|
||||||
|
_CrtSetReportMode(_CRT_ERROR, reportMode);
|
||||||
|
#if !defined(Q_OS_WINCE)
|
||||||
|
int ret = _CrtDbgReport(_CRT_ERROR, __FILE__, __LINE__, QT_VERSION_STR, buf);
|
||||||
|
#else
|
||||||
|
int ret = _CrtDbgReportW(_CRT_ERROR, _CRT_WIDE(__FILE__),
|
||||||
|
__LINE__, _CRT_WIDE(QT_VERSION_STR),
|
||||||
|
reinterpret_cast<const wchar_t *> (
|
||||||
|
QString::fromLatin1(buf).utf16()));
|
||||||
|
#endif
|
||||||
|
if (ret == 0 && reportMode & _CRTDBG_MODE_WNDW)
|
||||||
|
return; // ignore
|
||||||
|
else if (ret == 1)
|
||||||
|
_CrtDbgBreak();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined(Q_OS_UNIX) || defined(Q_CC_MINGW))
|
||||||
|
abort(); // trap; generates core dump
|
||||||
|
#else
|
||||||
|
exit(1); // goodbye cruel world
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void qErrnoWarning(const char *msg, ...)
|
||||||
|
{
|
||||||
|
// qt_error_string() will allocate anyway, so we don't have
|
||||||
|
// to be careful here (like we do in plain qWarning())
|
||||||
|
QString buf;
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, msg);
|
||||||
|
if (msg)
|
||||||
|
buf.vsprintf(msg, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
QMessageLogger().critical("%s (%s)", buf.toLocal8Bit().constData(),
|
||||||
|
qt_error_string(-1).toLocal8Bit().constData());
|
||||||
|
}
|
||||||
|
|
||||||
|
void qErrnoWarning(int code, const char *msg, ...)
|
||||||
|
{
|
||||||
|
// qt_error_string() will allocate anyway, so we don't have
|
||||||
|
// to be careful here (like we do in plain qWarning())
|
||||||
|
QString buf;
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, msg);
|
||||||
|
if (msg)
|
||||||
|
buf.vsprintf(msg, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
QMessageLogger().critical("%s (%s)", buf.toLocal8Bit().constData(),
|
||||||
|
qt_error_string(code).toLocal8Bit().constData());
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
|
||||||
|
extern bool usingWinMain;
|
||||||
|
extern Q_CORE_EXPORT void qWinMsgHandler(QtMsgType t, const char *str);
|
||||||
|
extern Q_CORE_EXPORT void qWinMessageHandler(QtMsgType t, const QMessageLogContext &context,
|
||||||
|
const char *str);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\typedef QtMsgHandler
|
||||||
|
\relates <QtGlobal>
|
||||||
|
\deprecated
|
||||||
|
|
||||||
|
This is a typedef for a pointer to a function with the following
|
||||||
|
signature:
|
||||||
|
|
||||||
|
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 7
|
||||||
|
|
||||||
|
This typedef is deprecated, you should use QMessageHandler instead.
|
||||||
|
\sa QtMsgType, QMessageHandler, qInstallMsgHandler(), qInstallMessageHandler()
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\typedef QMessageHandler
|
||||||
|
\relates <QtGlobal>
|
||||||
|
\since 5.0
|
||||||
|
|
||||||
|
This is a typedef for a pointer to a function with the following
|
||||||
|
signature:
|
||||||
|
|
||||||
|
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 49
|
||||||
|
|
||||||
|
\sa QtMsgType, qInstallMessageHandler()
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn QMessageHandler qInstallMessageHandler(QMessageHandler handler)
|
||||||
|
\relates <QtGlobal>
|
||||||
|
\since 5.0
|
||||||
|
|
||||||
|
Installs a Qt message \a handler which has been defined
|
||||||
|
previously. Returns a pointer to the previous message handler
|
||||||
|
(which may be 0).
|
||||||
|
|
||||||
|
The message handler is a function that prints out debug messages,
|
||||||
|
warnings, critical and fatal error messages. The Qt library (debug
|
||||||
|
mode) contains hundreds of warning messages that are printed
|
||||||
|
when internal errors (usually invalid function arguments)
|
||||||
|
occur. Qt built in release mode also contains such warnings unless
|
||||||
|
QT_NO_WARNING_OUTPUT and/or QT_NO_DEBUG_OUTPUT have been set during
|
||||||
|
compilation. If you implement your own message handler, you get total
|
||||||
|
control of these messages.
|
||||||
|
|
||||||
|
The default message handler prints the message to the standard
|
||||||
|
output under X11 or to the debugger under Windows. If it is a
|
||||||
|
fatal message, the application aborts immediately.
|
||||||
|
|
||||||
|
Only one message handler can be defined, since this is usually
|
||||||
|
done on an application-wide basis to control debug output.
|
||||||
|
|
||||||
|
To restore the message handler, call \c qInstallMessageHandler(0).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
\snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 23
|
||||||
|
|
||||||
|
\sa qDebug(), qWarning(), qCritical(), qFatal(), QtMsgType,
|
||||||
|
{Debugging Techniques}
|
||||||
|
*/
|
||||||
|
|
||||||
|
QMessageHandler qInstallMessageHandler(QMessageHandler h)
|
||||||
|
{
|
||||||
|
if (!messageHandler)
|
||||||
|
messageHandler = qDefaultMessageHandler;
|
||||||
|
QMessageHandler old = messageHandler;
|
||||||
|
messageHandler = h;
|
||||||
|
#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
|
||||||
|
if (!messageHandler && usingWinMain)
|
||||||
|
messageHandler = qWinMessageHandler;
|
||||||
|
#endif
|
||||||
|
return old;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn QtMsgHandler qInstallMsgHandler(QtMsgHandler handler)
|
||||||
|
\relates <QtGlobal>
|
||||||
|
\deprecated
|
||||||
|
|
||||||
|
Installs a Qt message \a handler which has been defined
|
||||||
|
previously. This method is deprecated, use qInstallMessageHandler
|
||||||
|
instead.
|
||||||
|
\sa QtMsgHandler, qInstallMessageHandler
|
||||||
|
*/
|
||||||
|
|
||||||
|
QtMsgHandler qInstallMsgHandler(QtMsgHandler h)
|
||||||
|
{
|
||||||
|
//if handler is 0, set it to the
|
||||||
|
//default message handler
|
||||||
|
if (!msgHandler)
|
||||||
|
msgHandler = qDefaultMsgHandler;
|
||||||
|
QtMsgHandler old = msgHandler;
|
||||||
|
msgHandler = h;
|
||||||
|
#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
|
||||||
|
if (!msgHandler && usingWinMain)
|
||||||
|
msgHandler = qWinMsgHandler;
|
||||||
|
#endif
|
||||||
|
return old;
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -67,7 +67,8 @@ class QMessageLogContext
|
|||||||
Q_DISABLE_COPY(QMessageLogContext)
|
Q_DISABLE_COPY(QMessageLogContext)
|
||||||
public:
|
public:
|
||||||
QMessageLogContext() : version(1), line(0), file(0), function(0) {}
|
QMessageLogContext() : version(1), line(0), file(0), function(0) {}
|
||||||
Q_DECL_CONSTEXPR QMessageLogContext(const char *fileName, int lineNumber, const char *functionName)
|
Q_DECL_CONSTEXPR QMessageLogContext(const char *fileName, int lineNumber,
|
||||||
|
const char *functionName)
|
||||||
: version(1), line(lineNumber), file(fileName), function(functionName) {}
|
: version(1), line(lineNumber), file(fileName), function(functionName) {}
|
||||||
|
|
||||||
int version;
|
int version;
|
||||||
@ -126,8 +127,6 @@ private:
|
|||||||
QMessageLogContext context;
|
QMessageLogContext context;
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_CORE_EXPORT void qt_message_output(QtMsgType, const QMessageLogContext &context, const char *buf);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
qDebug, qWarning, qCritical, qFatal are redefined to automatically include context information
|
qDebug, qWarning, qCritical, qFatal are redefined to automatically include context information
|
||||||
*/
|
*/
|
||||||
@ -139,15 +138,20 @@ Q_CORE_EXPORT void qt_message_output(QtMsgType, const QMessageLogContext &contex
|
|||||||
#define QT_NO_QDEBUG_MACRO while (false) QMessageLogger().noDebug
|
#define QT_NO_QDEBUG_MACRO while (false) QMessageLogger().noDebug
|
||||||
#define QT_NO_QWARNING_MACRO while (false) QMessageLogger().noDebug
|
#define QT_NO_QWARNING_MACRO while (false) QMessageLogger().noDebug
|
||||||
|
|
||||||
#ifdef QT_NO_DEBUG_OUTPUT
|
#if defined(QT_NO_DEBUG_OUTPUT)
|
||||||
# undef qDebug
|
# undef qDebug
|
||||||
# define qDebug QT_NO_QDEBUG_MACRO
|
# define qDebug QT_NO_QDEBUG_MACRO
|
||||||
#endif
|
#endif
|
||||||
#ifdef QT_NO_WARNING_OUTPUT
|
#if defined(QT_NO_WARNING_OUTPUT)
|
||||||
# undef qWarning
|
# undef qWarning
|
||||||
# define qWarning QT_NO_QWARNING_MACRO
|
# define qWarning QT_NO_QWARNING_MACRO
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Q_CORE_EXPORT void qt_message_output(QtMsgType, const QMessageLogContext &context, const char *buf);
|
||||||
|
|
||||||
|
Q_CORE_EXPORT void qErrnoWarning(int code, const char *msg, ...);
|
||||||
|
Q_CORE_EXPORT void qErrnoWarning(const char *msg, ...);
|
||||||
|
|
||||||
// deprecated. Use qInstallMessageHandler instead!
|
// deprecated. Use qInstallMessageHandler instead!
|
||||||
typedef void (*QtMsgHandler)(QtMsgType, const char *);
|
typedef void (*QtMsgHandler)(QtMsgType, const char *);
|
||||||
Q_CORE_EXPORT QtMsgHandler qInstallMsgHandler(QtMsgHandler);
|
Q_CORE_EXPORT QtMsgHandler qInstallMsgHandler(QtMsgHandler);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user