gpt4 book ai didi

c++ - Qt 将输出从 cout 重定向到 qDebug

转载 作者:太空狗 更新时间:2023-10-29 23:20:53 36 4
gpt4 key购买 nike

好的,我正在使用 MSVS 2013 和 Qt(msvc2013+opengl 32bit)

我有用 Qt 和扩展 dll 编写的应用程序主窗口。主应用程序写入 qDebug()。但是扩展 dll 对 qDebug() 一无所知,所以我使用的是 std::cout。我找到了丑陋的解决方案:

void Console()
{
AllocConsole();
FILE *pFileCon = NULL;
pFileCon = freopen("CONOUT$", "w", stdout);

COORD coordInfo;
coordInfo.X = 130;
coordInfo.Y = 900;

SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coordInfo);
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE),ENABLE_QUICK_EDIT_MODE| ENABLE_EXTENDED_FLAGS);
}

在 main 中,我调用了函数 Console(),它在我的窗口附近提供了黑色控制台。它不是很整洁,而且我想按顺序查看事件,但我在应用程序输出和控制台中分别看到它们。

所以问题是:有没有什么办法可以从 dll 中捕获所有 std::cout 输出并将其丢给应用程序输出?

最佳答案

您需要重定向 qDebug() 给出的输出。

static void customMsgHandler(QtMsgType type, const QMessageLogContext &, const QString &message)
{
QString txt;
switch (type) {
case QtDebugMsg:
txt = QString("Debug: %1").arg(message);
break;
case QtWarningMsg:
txt = QString("Warning: %1").arg(message);
break;
case QtCriticalMsg:
txt = QString("Critical: %1").arg(message);
break;
case QtFatalMsg:
txt = QString("Fatal: %1").arg(message);
abort();
}

QFile outFile("log.txt");
outFile.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream ts(&outFile);
ts << txt << endl;
}

然后在声明 QAplication 之后的 main() 函数中

qInstallMessageHandler(customMsgHandler);

这将使您成为一个跟踪文件,所有 qDebug() 调用都将写入。

希望对你有帮助

关于c++ - Qt 将输出从 cout 重定向到 qDebug,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25377336/

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