在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中查看動態代碼
- 4. 在Visual Studio Debugger中查看Lambdas
- 5. Visual Studio 2010可以在Visual Studio中查看嗎?
- 6. 如何在Visual Studio 2008中查看數據庫中的數據
- 7. 如何在Visual Studio 2012中查看IL的類/方法
- 8. 如何在Visual Studio 2013中查看錶格的數據
- 9. 如何在Visual Studio中查看SharePoint網站的代碼?
- 10. 如何在Visual Studio中「查看」字符串的字符值?
- 11. 如何在Visual Studio瀏覽器中查看XML文檔
- 12. 如何在Visual Studio 2015中查看.NET Core框架的來源
- 13. 如何在Visual Studio Profiler中查看掛鐘時間
- 14. 如何我在Visual Studio中查看數據庫的內容,2012
- 15. 如何在Visual Studio代碼中查看JSCode生成的文檔?
- 16. 如何在Visual Studio中查看線程窗口?
- 17. 如何在Visual Studio 2010調試器中查看後臺線程
- 18. 如何在Visual Studio 2013中查看Team Foundation Server?
- 19. 如何在Visual Studio 2010中查看調試輸出?
- 20. 如何在Visual Studio中查看匿名例外
- 21. 查看visual studio中的行長度2012
- 22. Visual Studio 2010中的幫助查看器
- 23. 如何從Visual Studio中的Windows Mobile 6中查看STDOUT?
- 24. 如何在調試時查看Visual C++ .NET(Visual Studio 2003)中std :: map的內容?
- 25. 如何查看Visual Studio中的cshtml頁面?
- 26. Visual Studio中的診斷事件查看器 - 如何配置
- 27. 如何查看Visual Studio中所有項目的構建事件?
- 28. 如何查看Visual Studio的intellisense中的事件?
- 29. 如何查看Visual Studio 2008調試器中的會話變量?
- 30. 如何查看Visual Studio代碼中的本地歷史更改?
在所有情況下都不是這樣的 –