2015-10-26 14 views
7

के लिए एक क्यूएमएल श्रेणी सेट करें मैं क्यूटी/क्यूएमएल विषय में नया हूं और मैं अपने सी ++ व्यापार तर्क में लॉगिंग हैंडलर स्थापित करने की कोशिश कर रहा हूं। निम्नलिखित कोड snipet हैंडलर स्थापित करता है और एक विशेष श्रेणी के सेट:console.log

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

क्यूटी 5 में यह भी संभव है:

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

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

परिणाम निम्न स्थापित संदेश हैंडलर को क्यूटी बैकएंड से एक फोन है साथ QML में सीधे में डीबग संदेश लिखने के लिए:

console.debug("debug message") 

लेकिन QMessageLogConext में 'cateory' हमेशा 'qml' है। क्या एक और श्रेणी सीधे क्यूएमएल में सेट करना संभव है?

+1

यह जानना अच्छा होगा कि आपको और श्रेणियों की आवश्यकता क्यों है। क्या आप हासिल करने की कोशिश कर रहे हैं? लॉगिंग स्टेटमेंट मूल के अधिक संदर्भ प्राप्त करने के लिए आप 'QMessageLogConext' के अन्य सदस्यों (' फ़ाइल, फ़ंक्शन, लाइन') का उपयोग कर सकते हैं। – KD07

+0

मैं एक आवेदन में विभिन्न QML एक्सटेंशन का उपयोग करना चाहता हूं और लॉगिंग सिस्टम की आवश्यकता है, जहां मैं अपने स्रोत से निर्भर संदेशों को प्रिंट कर सकता हूं। उदाहरण के लिए, यदि श्रेणियों में "एक्सटेंशन 1" लिखें, और एक qDebug() संदेश सेट किया गया है, तो यह श्रेणी (संदेश सहित) अनुकूलित हैंडलर में दिखाई देगी। तो मैं यह पता लगाने के लिए श्रेणी का उपयोग कर सकता हूं, जो कि qDebug संदेश का विस्तार करता है। – fischeth

उत्तर

4

मुझे लगता है कि QML इंजन में डिफ़ॉल्ट श्रेणी को ओवरराइड करने के लिए उपलब्ध बॉक्स समाधान से बाहर नहीं है। Here बहुत अच्छा स्पष्टीकरण और कोड के साथ संभावित समाधान है।

+1

हाँ, यह सच है। [क्यूटी और सी ++] (https://blog.qt.io/blog/2014/03/11/qt-weekly-1- वर्गीकृत-logging/) में नई श्रेणियां बनाने के तरीके हैं, लेकिन अभी तक QML में नहीं। @ फिशचेथ [यहां] (http://stackoverflow.com/questions/18410549/how-to-redirect-qmls-console-log-to-cpp-stdout]) आपके पास एक और विचार है। – Tarod

6

क्यूटी 5.8 से शुरू, क्यूएमएल में बॉक्स के बाहर available को वर्गीकृत किया गया।

एक लॉगिंग श्रेणी console.log() और दोस्तों को पहले तर्क के रूप में पास की जा सकती है। अगर लॉगर को आपूर्ति की जाती है तो लॉगिंग श्रेणी का नाम लॉगिंग श्रेणी के रूप में उपयोग किया जाएगा अन्यथा डिफ़ॉल्ट लॉगिंग श्रेणी का उपयोग किया जाएगा।

import QtQuick 2.8 

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

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

डॉक्स से स्निपेट क्यों नहीं जोड़ें? – Mitch

+1

@ मिच स्वीकृत स्निपेट के साथ संपादित सुझाव। –

संबंधित मुद्दे