2015-10-26 14 views
7

Ich bin neu in der Qt/QML-Thema und ich versuche, eine Protokollierung Handler in meiner C++ Business-Logik zu installieren. Das folgende Codestück installiert einen Handler und setzt eine spezielle Kategorie:Setzen Sie eine QML-Kategorie für console.log

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

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

Das Ergebnis ist ein Anruf aus dem Qt-Backend auf die folgenden installierten Nachrichtenhandler:

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

In Qt 5 ist es auch möglich,

console.debug("debug message") 

Aber die 'cateory' in QMessageLogConext ist immer 'QML': Debug-Nachrichten direkt in in QML mit zu schreiben. Ist es möglich, eine andere Kategorie direkt in QML zu setzen?

+1

Es wäre schön zu wissen, warum Sie mehr Kategorien benötigen. Was versuchst du zu erreichen? Sie können andere Member ('file, function, line') von' QMessageLogConext' verwenden, um mehr Kontext für den Ursprung der Logging-Anweisung zu erhalten. – KD07

+0

Ich möchte verschiedene QML-Erweiterungen in einer Anwendung verwenden und brauche ein Protokollierungssystem, mit dem ich Nachrichten abhängig von der Quelle drucken kann. Wenn beispielsweise in Kategorien "extension1" geschrieben wird und eine qDebug() - Nachricht festgelegt wird, wird diese Kategorie (einschließlich der Nachricht) im angepassten Handler angezeigt. Also kann ich anhand der Kategorie herausfinden, welche Erweiterung die qDebug-Nachricht erzeugt hat. – fischeth

Antwort

4

Ich denke, es gibt keine Out-of-Box-Lösung zum Überschreiben der Standardkategorie in der QML-Engine. Here ist die mögliche Lösung mit sehr guter Erklärung und Code.

+1

Ja, das stimmt. Es gibt Möglichkeiten zum Erstellen neuer Kategorien in [Qt & C++] (https://blog.qt.io/blog/2014/03/11/qt-weekly-1-categorized-logging/), aber noch nicht in QML. @fischeth [http://stackoverflow.com/questions/18410549/how-to-redirect-qmls-console-log-to-cpp-stdout]) Sie haben eine andere Idee. – Tarod

6

Beginnend mit Qt 5.8 kategorisierte Protokollierung available out of the Box in QML. console.log() und Freunde als erste Argument

kann eine Protokoll Kategorie übergeben werden. Wenn sie an den Logger geliefert wird, wird der Name der LoggingCategory als Logging Category verwendet, andernfalls wird die Standardprotokollierung Kategorie verwendet.

import QtQuick 2.8 

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

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

Warum nicht das Snippet aus den Dokumenten hinzufügen? – Mitch

+1

@Mitch Approved vorgeschlagen, mit dem Snippet zu bearbeiten. –

Verwandte Themen