"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > QT에서 Qdebug, Qwarning 및 Qcritical 출력을 어떻게 리디렉션 할 수 있습니까?

QT에서 Qdebug, Qwarning 및 Qcritical 출력을 어떻게 리디렉션 할 수 있습니까?

2025-03-07에 게시되었습니다
검색:682

How can I redirect QDebug, QWarning, and QCritical output in Qt?

사용자 정의 메시지 처리기

디버그 출력을 리디렉션하기 위해 QT는 QinstallMessageHandler () 함수를 제공합니다. 이를 통해 메시지를 인쇄하기 전에 메시지를 처리하는 사용자 정의 메시지 처리기를 설치할 수 있습니다. 예제 핸들러는 다음과 같습니다.

void myMessageOutput (qtmsgtype 유형, const qmessagelogcontext & context, const qstring & msg) { qbytearray localmsg = msg.tolocal8bit (); 스위치 (유형) { 사례 qtdebugmsg : fprintf (stderr, "debug : %s ( %s : %u, %s) \ n", localmsg.constdata (), context.file, context.line, context.function); 부서지다; CASE QTINFOMSG : // ... 사례 qtwarningmsg : // ... 사례 qtcriticalmsg : // ... 사례 qtfatalmsg : fprintf (stderr, "치명적 : %s ( %s : %u, %s) \ n", localmsg.constdata (), context.file, context.line, context.function); 중단 (); } }

이 핸들러는 메시지를 stderr로 출력하지만 stderr를 파일 스트림으로 바꾸어 출력을 리디렉션 할 수 있습니다. 기능 :
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    QByteArray localMsg = msg.toLocal8Bit();
    switch (type) {
    case QtDebugMsg:
        fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
        break;
    case QtInfoMsg:
        // ...
    case QtWarningMsg:
        // ...
    case QtCriticalMsg:
        // ...
    case QtFatalMsg:
        fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
        abort();
    }
}
QinstallMessageHandler (myMessageOutput);

설치되면 모든 qdebug 및 유사한 메시지가 핸들러로 리디렉션되고 지정된 파일 또는 스트림에 작성됩니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3