gpt4 book ai didi

c++ - Qt5 如何将 qDebug() 语句重定向到 Qt Creator 2.6 控制台

转载 作者:IT老高 更新时间:2023-10-28 22:58:57 27 4
gpt4 key购买 nike

在搜索了 qDebug() 语句在 Qt 的标准消息处理程序中正常工作但在我切换到我自己的时失败的原因之后,我在这里呼吁看看是否有其他人有任何解决此问题的经验。

我知道/尝试过的事情,但无济于事......

1) CONFIG += console

2) DEFINES -= QT_NO_WARNING_OUTPUT QT_NO_DEBUG_OUTPUT

3) ::fprintf(stderr, "ERROR\n"); ::fflush(stderr);

4) ::fprintf(stdout, "OUTPUT\n"); ::fflush(stdout);

5) std::cerr << "CERROR" << std::endl; std::cerr.flush();

但是在使用内置处理程序时它可以正常工作(即,它将消息打印到 QtCreator 控制台)

int main(int argc, char *argv[]) {
// Use my handler
qInstallMessageHandler(MyCustomLogger);
qDebug() << "Not Printed";

// Use standard handler
qInstallMessageHandler(0);
qDebug() << "Correctly Printed";

// Use my handler again
qInstallMessageHandler(MyCustomLogger);
qDebug() << "Not Printed Again...";
}

最近的测试是使用 WinAPI 命令为自己分配一个控制台,这会导致正确的行为,所有输出到 stderr 和 stdout 在我创建的控制台上都是可见的。但是,这不是我想要的行为,我希望能够在 QtCreator 中查看此输出。

关于标准消息处理程序如何打印到调试器的任何想法?我还没有在 Qt 源代码中找到它。

最佳答案

正如 Frank Osterfeld 在他的评论中提到的:

On windows, qDebug() uses the debug channel, not stderr.

在深入研究 QDebug 代码和 QMessageLogger 之后,我找到了答案。方便的 WinAPI 函数 OutputDebugString.

用法(改编自peppe's):

#include <QApplication>
#include <QtDebug>
#include <QtGlobal>

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

void MyMessageOutput(QtMsgType Type, const QMessageLogContext& Context, const QString &Message)
{
OutputDebugString(reinterpret_cast<const wchar_t *>(Message.utf16()));
}

int main(int argc, char **argv)
{
// A GUI application
QApplication app(argc, argv);

// Custom handler
qInstallMessageHandler(myMessageOutput);
qDebug() << "Printed in the console using my message handler in a windows GUI application";

// Default handler
qInstallMessageHandler(0);
qDebug() << "Also printed in the console!";

// Show GUI here
//MainForm *MF = new MainForm();
//MF->show();

return app.exec();
}

关于c++ - Qt5 如何将 qDebug() 语句重定向到 Qt Creator 2.6 控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14643293/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com