Qt重定向输出从cout到qDebug
Qt redirect output from cout to qDebug
好的,我使用的是MSVS 2013和Qt(msvc2013+opengl 32位)
我有主窗口的应用程序写在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);
}
在主要我调用函数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;
}
然后在main()函数中声明应用程序后
qInstallMessageHandler(customMsgHandler);
这将为您创建一个跟踪文件,所有qDebug()调用都将在该文件上写入。
我希望这对你有帮助
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- std::cout.imbue()多重调用
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 在 COUT 语句中使用 COUT 调用函数
- GCC 4.8.2 自动矢量化由于 cout 而失败
- std::cout输出int时出现编译错误
- 在这种情况下显式调用时,std::cout 如何更改析构函数的行为?
- C++ Setter/Getter,cout 工作,printf 失败
- C++ cout 将双精度对齐到精度 2 并正确对齐
- 结构元素名称要 cout?
- 使用模板类重载 cout
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- 带有 cout 的指针在C++
- cout 指针时的实际数字
- 在C++中是否有一种既定的 cout 替代方案,其行为类似于 qDebug?
- std::cout 给出了来自 qDebug 的不同输出
- Qt重定向输出从cout到qDebug