如何在Visual Studio中查看qDebug()?

编程入门 行业动态 更新时间:2024-10-26 08:21:41
本文介绍了如何在Visual Studio中查看qDebug()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

在Qt Creator中,我可以直接在IDE中查看qDebug(),qWarning()等输出.我该如何在Visual Studio中做到这一点?

In Qt Creator, I could view the qDebug(), qWarning() etc. output directly in the IDE. How could I do this in Visual Studio?

推荐答案

使用附加的调试器运行程序时,它将显示在Visual Studio的输出"窗口中,但是出于调试目的,我经常将调试输出重定向到某些一种不错的日志窗口,您可以使用功能qInstallMsgHandler:

When you run the program with an attached debugger, it will show in the Output Window of Visual Studio, but for Debug purposes i often redirect the debug output to some kind of nice log window, which you can do by using the function 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 ) ); } } }

更多推荐

如何在Visual Studio中查看qDebug()?

本文发布于:2023-11-05 09:08:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1560440.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何在   Visual   qDebug   Studio

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!