2015-10-26 6 views
7

Qt/QMLトピックが新しく、C++ビジネスロジックにロギングハンドラをインストールしようとしています。次のコードsnipetは、ハンドラをインストールし、特別なカテゴリ設定:console.logのQMLカテゴリを設定します。

int main(int argc, char *argv[]) 
    { 
     qInstallMessageHandler(myMessageOutput); 
     QLoggingCategory mainEx("main.ex"); 

     qCDebug(mainEx) << "debug message"; 
     ... 
    } 

を結果は、次のインストールメッセージハンドラへのQtバックエンドからの呼び出しです:Qtの5では

void myMessageOutput(QtMsgType type, const QMessageLogContext &context, 
        const QString &msg) 
{ 
    ... 
} 

ことも可能ですQMLに直接ではデバッグメッセージを書き込みます:

console.debug("debug message") 

しかしQMessageLogConextの「cateoryは」「QML」は常にあります。別のカテゴリをQMLで直接設定することは可能ですか?

+1

なぜあなたはより多くのカテゴリが必要なのかを知ってうれしいです。あなたは何を達成しようとしていますか? 'QMessageLogConext'の他のメンバー(' file、function、line')を使って、ロギングステートメント起点のより多くのコンテキストを得ることができます。 – KD07

+0

1つのアプリケーションで異なるQML拡張機能を使用し、そのソースから依存するメッセージを印刷できるロギングシステムが必要です。たとえば、カテゴリに「extension1」とqDebug()メッセージが設定されている場合、このカテゴリ(メッセージを含む)がカスタマイズされたハンドラに表示されます。そこで、このカテゴリを使ってqDebugメッセージがどの拡張子で生成されたかを調べることができます。 – fischeth

答えて

4

QMLエンジンのデフォルトのカテゴリを上書きするためのデフォルトのソリューションはありません。 Hereは非常に良い説明とコードを持つ可能な解決策です。

+1

はい、そうです。 [Qt&C++](https://blog.qt.io/blog/2014/03/11/qt-weekly-1-categorized-logging/)に新しいカテゴリを作成する方法はありますが、まだQMLにはありません。 @fischeth [Here](http://stackoverflow.com/questions/18410549/how-to-redirect-qmls-console-log-to-cpp-stdout))別のアイデアがあります。 – Tarod

6

Qt 5.8からは、QMLのログavailableをそのまま分類できます。

ロギングカテゴリは、最初の引数 としてconsole.log()およびfriendsに渡すことができます。ロガーに供給された場合、LoggingCategoryの という名前がロギングカテゴリーとして使用され、それ以外の場合は、デフォルトのロギング カテゴリーが使用されます。

import QtQuick 2.8 

Item { 
    LoggingCategory { 
     id: category 
     name: "com.qt.category" 
    } 

    Component.onCompleted: { 
     console.log(category, "message"); 
    } 
} 
+0

ドキュメントからスニペットを追加してみませんか? – Mitch

+1

@Mitchスニペットで推奨される編集を承認しました。 –

関連する問題