2012-08-02 33 views
7

QtコンソールアプリケーションでqDebugを使用してQt Creatorの「アプリケーション出力」ウィンドウに出力するにはどうすればよいですか?現在qDebugは非デバッグ出力を妨げるコンソールウィンドウに書き込みます。qDebug QtコンソールアプリケーションをQt Creatorアプリケーション出力に出力する

Qt GUIアプリケーションでqDebugを使用すると、デフォルトでアプリケーション出力ウィンドウに出力されます。あなたはどちらかの出力すべてコンソールまたはQtの作者のアプリケーションは、[出力]パネルにすべてのものにすることができます

Application output

答えて

2

QList<QtMsgHandler> messageHandlers_; 

static void messageDispatcher(QtMsgType type, const char *msg) 
{ 
    foreach (QtMsgHandler callback, ::messageHandlers_) 
    callback(type, msg); 
} 

static void messageLogger(QtMsgType type, const char *msg) 
{ 
    QString output; 
    switch (type) { 
    case QtDebugMsg: output = QString("mesage: %1\n").arg(msg); break; 
    case QtWarningMsg: output = QString("warning: %1\n").arg(msg); break; 
    case QtCriticalMsg: output = QString("critical: %1\n").arg(msg); break; 
    case QtFatalMsg: output = QString("fatal: %1\n").arg(msg); break; 
    default: return; 
    } 

    QFile file("log.txt"); 
    if (file.open(QIODevice::WriteOnly | QIODevice::Append)) 
    QTextStream(&file) << output; 
} 

int main() 
{ 
    ... 
    ::messageHandlers_.append(messageLogger) 
    qInstallMsgHandler(messageDispatcher); 
    ... 
} 
+0

このコードは機能しません。コードサンプルのタイプミス(少なくとも1つのように見える)のためか、Qtが2013年以降に進んでいて、その答えが廃止された呼び出しを使用しているかどうかは不明です。 –

6

完全性のために:コンソールの代わりにすべての出力をパネルに表示させたい場合は、Project-> Runの設定で「Run in terminal」のチェックを外すことができます。あなたは多分このように、いくつかのコードを記述する必要があるかもしれません、複数の場所にQDebugをリダイレクトする

+0

私はそれを知っている...しかし、私は2つの異なる場所に出力したい...なぜそのデバッグことです出力。 – Eugene

+0

残念ながら、あなたはそれをすることはできません。 – Bojan

+2

"Run in terminal"がチェックされておらず、アプリからの出力が表示されません。 std :: cout、qDebugは何も出力しません – Dmitriy