From f319fcf70917c392913cf6db6115d18623dd4fd5 Mon Sep 17 00:00:00 2001 From: Tomasz Olszak Date: Thu, 22 Mar 2018 11:25:59 +0100 Subject: Add defaultLogLevel to LoggingCategory Add possibility to define default logging category log level. Just like in QLoggingCategory constructor. [ChangeLog][QML Elements][LoggingCategory] Added defaultLogLevel property. It is possible to define default log level that LoggingCategory is enabled for. Task-number: QTBUG-67094 Change-Id: I12557dfb7c228c40b325d0dccde4c525acae0300 Reviewed-by: Michael Brasser --- src/imports/qtqml/plugins.qmltypes | 15 +++++++++++++-- src/qml/qml/qqmlengine.cpp | 4 +++- src/qml/qml/qqmlloggingcategory.cpp | 36 +++++++++++++++++++++++++++++++++--- src/qml/qml/qqmlloggingcategory_p.h | 13 +++++++++++++ 4 files changed, 62 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/imports/qtqml/plugins.qmltypes b/src/imports/qtqml/plugins.qmltypes index 82333627a0..caa04b04bb 100644 --- a/src/imports/qtqml/plugins.qmltypes +++ b/src/imports/qtqml/plugins.qmltypes @@ -198,9 +198,20 @@ Module { Component { name: "QQmlLoggingCategory" prototype: "QObject" - exports: ["QtQml/LoggingCategory 2.8"] - exportMetaObjectRevisions: [0] + exports: ["QtQml/LoggingCategory 2.12", "QtQml/LoggingCategory 2.8"] + exportMetaObjectRevisions: [1, 0] + Enum { + name: "DefaultLogLevel" + values: { + "Debug": 0, + "Info": 4, + "Warning": 1, + "Critical": 2, + "Fatal": 3 + } + } Property { name: "name"; type: "string" } + Property { name: "defaultLogLevel"; revision: 1; type: "DefaultLogLevel" } } Component { name: "QQmlTimer" diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 759d86c789..119120572c 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -228,7 +228,9 @@ void QQmlEnginePrivate::registerBaseTypes(const char *uri, int versionMajor, int qmlRegisterType(uri, versionMajor, (versionMinor < 1 ? 1 : versionMinor), "Instantiator"); //Only available in >=2.1 qmlRegisterCustomType(uri, versionMajor, versionMinor,"Connections", new QQmlConnectionsParser); qmlRegisterType(); - qmlRegisterType(uri, versionMajor, (versionMinor < 8 ? 8 : versionMinor), "LoggingCategory"); //Only available in >=2.8 + + qmlRegisterType(uri, versionMajor, 8, "LoggingCategory"); //Only available in >=2.8 + qmlRegisterType(uri, versionMajor, 12, "LoggingCategory"); //Only available in >=2.12 } diff --git a/src/qml/qml/qqmlloggingcategory.cpp b/src/qml/qml/qqmlloggingcategory.cpp index 597fe458fa..b59a26e17e 100644 --- a/src/qml/qml/qqmlloggingcategory.cpp +++ b/src/qml/qml/qqmlloggingcategory.cpp @@ -59,6 +59,7 @@ LoggingCategory { id: category name: "com.qt.category" + defaultLogLevel: LoggingCategory.Warning } Component.onCompleted: { @@ -84,6 +85,17 @@ \sa QLoggingCategory::categoryName() */ +/*! + \qmlproperty enumeration QtQml::LoggingCategory::defaultLogLevel + \since 5.12 + + Holds the default log level of the logging category. By default it is + created with the LoggingCategory.Debug log level. + + \note This property needs to be set when declaring the LoggingCategory + and cannot be changed later. +*/ + QQmlLoggingCategory::QQmlLoggingCategory(QObject *parent) : QObject(parent) , m_initialized(false) @@ -99,6 +111,11 @@ QString QQmlLoggingCategory::name() const return QString::fromUtf8(m_name); } +QQmlLoggingCategory::DefaultLogLevel QQmlLoggingCategory::defaultLogLevel() const +{ + return m_defaultLogLevel; +} + QLoggingCategory *QQmlLoggingCategory::category() const { return m_category.data(); @@ -111,10 +128,25 @@ void QQmlLoggingCategory::classBegin() void QQmlLoggingCategory::componentComplete() { m_initialized = true; - if (m_name.isNull()) + if (m_name.isNull()) { qmlWarning(this) << QLatin1String("Declaring the name of the LoggingCategory is mandatory and cannot be changed later !"); + } else { + QScopedPointer category(new QLoggingCategory(m_name.constData(), QtMsgType(m_defaultLogLevel))); + m_category.swap(category); + } } +void QQmlLoggingCategory::setDefaultLogLevel(DefaultLogLevel defaultLogLevel) +{ + if (m_initialized) { + qmlWarning(this) << QLatin1String("The defaultLogLevel of a LoggingCategory cannot be changed after the Item is created"); + return; + } + + m_defaultLogLevel = defaultLogLevel; +} + + void QQmlLoggingCategory::setName(const QString &name) { if (m_initialized) { @@ -123,8 +155,6 @@ void QQmlLoggingCategory::setName(const QString &name) } m_name = name.toUtf8(); - QScopedPointer category(new QLoggingCategory(m_name.constData())); - m_category.swap(category); } #include "moc_qqmlloggingcategory_p.cpp" diff --git a/src/qml/qml/qqmlloggingcategory_p.h b/src/qml/qml/qqmlloggingcategory_p.h index 544db1fe33..ece06e04b4 100644 --- a/src/qml/qml/qqmlloggingcategory_p.h +++ b/src/qml/qml/qqmlloggingcategory_p.h @@ -65,11 +65,23 @@ class QQmlLoggingCategory : public QObject, public QQmlParserStatus Q_INTERFACES(QQmlParserStatus) Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(DefaultLogLevel defaultLogLevel READ defaultLogLevel WRITE setDefaultLogLevel REVISION 1) public: + enum DefaultLogLevel { + Debug = QtDebugMsg, + Info = QtInfoMsg, + Warning = QtWarningMsg, + Critical = QtCriticalMsg, + Fatal = QtFatalMsg + }; + Q_ENUM(DefaultLogLevel); + QQmlLoggingCategory(QObject *parent = nullptr); virtual ~QQmlLoggingCategory(); + DefaultLogLevel defaultLogLevel() const; + void setDefaultLogLevel(DefaultLogLevel defaultLogLevel); QString name() const; void setName(const QString &name); @@ -81,6 +93,7 @@ public: private: QByteArray m_name; QScopedPointer m_category; + DefaultLogLevel m_defaultLogLevel = Debug; bool m_initialized; }; -- cgit v1.2.3