在Qt Creator中,我可以直接在IDE中查看qDebug()
,qWarning()
等输出。我怎么能在Visual Studio中做到这一点?如何在Visual Studio中查看qDebug()?
5
A
回答
5
当您使用附加的调试器运行程序时,它将显示在Visual Studio的输出窗口中,但出于调试目的,我经常将调试输出重定向到某种漂亮的日志窗口,您可以通过使用功能qInstallMsgHandler
:
,我使用的代码:
#include <qapplication.h>
#include <qwidget.h>
#include <qplaintextedit.h>
#include <qmetaobject.h>
#include <qthread.h>
#include <qboxlayout.h>
#include <qdatetime.h>
#include <qdebug.h>
#include <cstdio>
#include <cassert>
QWidget *DEBUG_MESSAGE_DISPLAY_WIDGET = NULL;
QPlainTextEdit *DEBUG_MESSAGE_DISPLAY_TEXTEDIT = NULL;
void setupDebugDisplay();
void debugMessageDisplayFunc(QtMsgType type, const char *msg);
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
a.setQuitOnLastWindowClosed(true);
setupDebugDisplay();
// your code here.... e.g:
// YourMainWindow mainWindow;
int ret = a.exec();
delete DEBUG_MESSAGE_DISPLAY_WIDGET;
return ret;
}
void setupDebugDisplay()
{
QWidget *widget = new QWidget();
widget->setWindowTitle("Debug Log");
widget->setAttribute(Qt::WA_QuitOnClose, false); //quit only when mainwindow is closed
QBoxLayout* layout = new QVBoxLayout();
widget->setLayout(layout);
QPlainTextEdit *textEdit = new QPlainTextEdit(widget);
QFont font = QFont("Monospace");
font.setStyleHint(QFont::TypeWriter);
textEdit->setFont(font);
textEdit->setReadOnly(true);
layout->addWidget(textEdit);
widget->show();
DEBUG_MESSAGE_DISPLAY_WIDGET = widget;
DEBUG_MESSAGE_DISPLAY_TEXTEDIT = textEdit;
qInstallMsgHandler(debugMessageDisplayFunc);
}
void debugMessageDisplayFunc(QtMsgType type, const char *msg)
{
bool do_abort = false;
const char* msgTypeStr = NULL;
switch (type) {
case QtDebugMsg:
msgTypeStr = "Debug";
break;
case QtWarningMsg:
msgTypeStr = "Warning";
break;
case QtCriticalMsg:
msgTypeStr = "Critical";
break;
case QtFatalMsg:
msgTypeStr = "Fatal";
do_abort = true;
default:
assert(0);
return;
}
QTime now = QTime::currentTime();
QString formattedMessage =
QString::fromLatin1("%1 %2 %3")
.arg(now.toString("hh:mm:ss:zzz"))
.arg(msgTypeStr).arg(msg);
// print on console:
fprintf(stderr, "%s\n", formattedMessage.toLocal8Bit().constData());
// print in debug log window
{
bool isMainThread = QThread::currentThread() == QApplication::instance()->thread();
if(DEBUG_MESSAGE_DISPLAY_TEXTEDIT)
{
if(isMainThread)
DEBUG_MESSAGE_DISPLAY_TEXTEDIT->appendPlainText(formattedMessage);
else // additional code, so that qDebug calls in threads will work aswell
QMetaObject::invokeMethod(DEBUG_MESSAGE_DISPLAY_TEXTEDIT, "appendPlainText", Qt::QueuedConnection, Q_ARG(QString, formattedMessage));
}
}
}
0
它重定向到visual studio的输出窗口。
7
还有一个更简单的方法:
转到项目属性>链接>系统:设置子系统 “子系统:CONSOLE”
当您运行程序时,您将获得一个控制台,并且qDebug()将被重定向到它。 (你也可以使用std :: cout)
+2
非常奇怪的建议。如果我有一个Win32应用程序,并且/ SUBSYSTEM:WINDOWS是一个强制选项,该怎么办? – Dalamber
相关问题
- 1. 在Visual Studio中查看Visual SourceSafe日志
- 2. 在Visual Studio中查看动态代码
- 3. 在Visual Studio Debugger中查看Lambdas
- 4. 在Visual Studio中查看多个文件
- 5. Visual Studio 2010可以在Visual Studio中查看吗?
- 6. 如何在Visual Studio 2008中查看数据库中的数据
- 7. 如何在Visual Studio 2013中查看表格的数据
- 8. 如何在Visual Studio 2013中查看Team Foundation Server?
- 9. 如何在Visual Studio 2010中查看调试输出?
- 10. 如何在Visual Studio 2015中查看.NET Core框架的来源
- 11. 如何在Visual Studio中查看线程窗口?
- 12. 如何在Visual Studio代码中查看JSCode生成的文档?
- 13. 如何在Visual Studio Profiler中查看挂钟时间
- 14. 如何在Visual Studio中查看匿名例外
- 15. 如何在Visual Studio中“查看”字符串的字符值?
- 16. 如何在Visual Studio 2010调试器中查看后台线程
- 17. Visual Studio 2010中的帮助查看器
- 18. 如何从Visual Studio中的Windows Mobile 6中查看STDOUT?
- 19. 如何在调试时查看Visual C++ .NET(Visual Studio 2003)中std :: map的内容?
- 20. 如何配置Visual Studio以在本地IIS上查看net.tcp URL?
- 21. 如何查看标准错误在Visual Studio 2015年(C#,的WinForms)
- 22. 如何查看Visual Studio中的插件列表和插件?
- 23. 如何查看Visual Studio 2008调试器中的会话变量?
- 24. 如何查看Visual Studio调试器中的位图对象?
- 25. 如何查看Visual Studio代码中的本地历史更改?
- 26. 如何查看Visual Studio 2012中的解除警告消息?
- 27. 如何在进入中断模式后在Visual Studio中查看自动变量
- 28. 如何在调试时在Visual Studio中查看有关HWND的信息?
- 29. 如何在运行时在visual studio中查看静态变量的值
- 30. 用于Visual Studio的3D CAD查看器
在所有情况下都不是这样的 –