Qt 在应用程序里总是有[PREVIEW] recv window msg, name:(Qt5QWindowIcon) hwd:(287097a)等信息不断输出,怎么解决

Qt 随意建一个空的widget窗口界面,在调试运行时,只要拖动窗口总是在应用程序输出如下信息

img


[PREVIEW] recv window msg, name:(Qt5QWindowIcon) hwd:(287097a) isvisiable(1) istopwnd(1) isTool(0) isPreview(0) pid:(19192)
[Hook] detach 19192, C:\Users\118ai\Desktop\zhongdian44_new_camera\zhongdian44_new_camera\build-zhongdian44_new_camera-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug\debug\zhongdian44_new_camera.exe
很烦人
有办法把这个信息给关闭掉,不让它在应用程序输出吗

这个信息是来自于程序的输出,通常是用于调试和诊断问题。如果不想看到这个信息,可以在代码中将输出关闭或者重定向到其他地方。具体的方法取决于程序的实现方式和输出方式。以下是一些可能的方法:

  • 使用 Qt 的 qInstallMessageHandler 函数来自定义消息处理函数,将不需要的消息过滤掉或者输出到其他地方。
  • 在代码中使用 freopen 函数将标准输出或者标准错误输出重定向到文件或者其他设备,例如 /dev/null。
  • 在命令行中使用重定向符号将程序的输出重定向到其他文件或者设备,例如将程序的输出重定向到 /dev/null:
    ./myprogram > /dev/null
    需要注意的是,关闭或者重定向程序的输出可能会影响程序的调试和诊断,因此在实际应用中需要谨慎处理。

这是Qt的调试输出信息,可以通过设置qInstallMessageHandler以自定义消息处理程序来关闭或重定向这些输出。

例如,可以在main.cpp中设置一个简单的消息处理程序来禁用Qt的默认消息输出:

#include <QtCore/QDebug>

void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
   //自定义消息处理代码
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qInstallMessageHandler(customMessageHandler); // 安装自定义消息处理程序

    //...

    return a.exec();
}

在消息处理程序的函数中,可以使用自定义代码对所有输出进行处理。要禁用Qt的所有消息输出,可以将自定义消息处理程序设置为无操作,如下所示:

#include <QtCore/QDebug>

void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
   //TODO: 什么都不做
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qInstallMessageHandler(customMessageHandler); // 安装自定义消息处理程序

    //...

    return a.exec();
}

这样就可以禁用Qt的所有消息输出了。注意,这会阻止标准输出和标准错误流中的所有消息,包括程序中可能需要的其他错误消息。

跟Qt没关系吧

基于ChatGPT4与博主叶秋学长的回答,望采纳!!!有其他问题也可以询问我哦💕:
你可以自定义一个消息处理函数,然后使用 qInstallMessageHandler 来安装它,这样所有的消息都会被传递给这个函数。下面是一个例子:

#include <qapplication.h>
#include <stdio.h>
#include <stdlib.h>

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:
        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(myMessageOutput);
    QApplication app(argc, argv);
    // your code here
    return app.exec();
}

在这个例子中,所有的消息都会被转化为本地8位字节序列,并通过 stderr 输出。你可以根据需要自定义 myMessageOutput 函数来改变消息的输出方式【48†source】。