在使用 Qt 开发 GUI 应用程序时,常常需要输出一些调试信息以了解程序的运行状态。然而,对于 Qt GUI 应用程序,std::cout
?的输出并不会直接显示在 GUI 界面上,特别是在 Windows 平台上,默认情况下 GUI 应用程序并不会打开控制台窗口,因此?std::cout
?的输出可能会“丢失”。这篇博文将介绍几种在 Qt 应用程序中查看?std::cout
?输出的方法。
对于 Visual Studio 用户,可以通过更改项目属性来为 GUI 应用程序创建一个控制台窗口。
这将会在运行 GUI 应用程序时同时打开一个控制台窗口,std::cout
?的输出将显示在这个控制台窗口中。
Qt 提供了自己的消息日志系统,你可以使用?qDebug()
?来代替?std::cout
。这将输出信息到 Qt Creator 的“应用程序输出”控制台中。
#include <QDebug>
// ...
virtual void OnLeftButtonDown() override
{
qDebug() << "Left button down event captured.";
vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
}
运行后可在输出中看到相关信息:?
?
如果你希望将输出保存到文件中进行调试,可以将?std::cout
?的输出重定向到一个文本文件。
#include <iostream>
#include <fstream>
// ...
std::ofstream out("debug_output.txt");
std::streambuf *coutbuf = std::cout.rdbuf(); // 保存旧的 buf
std::cout.rdbuf(out.rdbuf()); // 重定向 std::cout 到 "debug_output.txt"
// ...
virtual void OnLeftButtonDown() override
{
std::cout << "Left button down event captured." << std::endl;
vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
}
// ...
std::cout.rdbuf(coutbuf); // 恢复到标准输出
这将把所有?std::cout
?的输出重定向到当前工作目录下的?debug_output.txt
?文件中。记得在程序结束时恢复原来的缓冲区。
?