2015-10-26 11 views
7

Sono nuovo per l'argomento Qt/QML e sto cercando di installare un gestore di registrazione nella mia logica di business C++. Il seguente codice snipet installa un gestore e imposta una categoria speciale:Impostare una categoria QML per console.log

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

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

Il risultato è una chiamata dal backend Qt per il seguente gestore di messaggi installato:

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

In Qt 5 è anche possibile di scrivere messaggi di debug direttamente in QML con:

console.debug("debug message") 

Ma la 'cateory' in QMessageLogConext è sempre 'QML'. È possibile impostare un'altra categoria direttamente in QML?

+1

E sarebbe bello sapere perché avete bisogno di più categorie. Cosa stai cercando di ottenere? È possibile utilizzare altri membri ('file, funzione, linea') di' QMessageLogConext' per ottenere più contesto dell'origine dell'istruzione di registrazione. – KD07

+0

Desidero utilizzare estensioni QML diverse in un'applicazione e ho bisogno di un sistema di registrazione, in cui posso stampare messaggi dipendenti dalla sua origine. Ad esempio, se scrivi "extension1" nelle categorie e viene impostato un messaggio qDebug(), questa categoria (incluso il messaggio) apparirà nel gestore personalizzato. Quindi posso usare la categoria per scoprire quale estensione ha prodotto il messaggio qDebug. – fischeth

risposta

4

Penso che non sia disponibile alcuna soluzione pronta per sostituire la categoria predefinita nel motore QML. Here è la soluzione possibile con spiegazione e codice molto buoni.

+1

Sì, è vero. Ci sono modi per creare nuove categorie in [Qt e C++] (https://blog.qt.io/blog/2014/03/11/qt-weekly-1-categorized-logging/), ma non ancora in QML. @fischeth [qui] (http://stackoverflow.com/questions/18410549/how-to-redirect-qmls-console-log-to-cpp-stdout]) hai un'altra idea. – Tarod

6

A partire da Qt 5.8, registrazione categorizzata available fuori dalla scatola in QML.

Una categoria di registrazione può essere passato a console.log() e amici come primo argomento . Se fornito al registratore, il nome della LoggingCategory verrà utilizzato come categoria di registrazione, altrimenti verrà utilizzata la categoria di registrazione predefinita .

import QtQuick 2.8 

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

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

Perché non aggiungere lo snippet dai documenti? – Mitch

+1

@Mitch Approvato modifica suggerita con lo snippet. –

Problemi correlati