aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlinfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/qqmlinfo.cpp')
-rw-r--r--src/qml/qml/qqmlinfo.cpp133
1 files changed, 45 insertions, 88 deletions
diff --git a/src/qml/qml/qqmlinfo.cpp b/src/qml/qml/qqmlinfo.cpp
index 2bfd2d5bb4..159a519bdc 100644
--- a/src/qml/qml/qqmlinfo.cpp
+++ b/src/qml/qml/qqmlinfo.cpp
@@ -1,63 +1,33 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQml module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qqmlinfo.h"
#include "qqmldata_p.h"
-#include "qqmlcontext.h"
-#include "qqmlcontext_p.h"
#include "qqmlmetatype_p.h"
#include "qqmlengine_p.h"
+#include "qqmlsourcecoordinate_p.h"
#include <QCoreApplication>
QT_BEGIN_NAMESPACE
/*!
- \namespace QtQml
+ \class QQmlInfo
\inmodule QtQml
- \brief Provides functions for producing logging messages for QML types.
+ \brief The QQmlInfo class allows logging of QML-related messages.
+
+ QQmlInfo is an opaque handle for QML-related diagnostic messages. You can
+ use the \c{<<} operator to add content to the message. When the QQmlInfo
+ object is destroyed, it prints the resulting message along with information
+ on the context.
+
+ \sa qmlDebug, qmlInfo, qmlWarning
*/
/*!
- \fn QQmlInfo QtQml::qmlDebug(const QObject *object)
- \relates QtQml
+ \fn QQmlInfo qmlDebug(const QObject *object)
+ \relates QQmlInfo
\since 5.9
Prints debug messages that include the file and line number for the
@@ -86,12 +56,12 @@ QT_BEGIN_NAMESPACE
QML MyCustomType (unknown location): Internal state: 42
\endcode
- \sa QtQml::qmlInfo, QtQml::qmlWarning
+ \sa qmlInfo, qmlWarning
*/
/*!
- \fn QQmlInfo QtQml::qmlInfo(const QObject *object)
- \relates QtQml
+ \fn QQmlInfo qmlInfo(const QObject *object)
+ \relates QQmlInfo
Prints informational messages that include the file and line number for the
specified QML \a object.
@@ -114,12 +84,12 @@ QT_BEGIN_NAMESPACE
QtMsgType. For Qt 5.9 and above, qmlInfo uses an info QtMsgType. To send
warnings, use qmlWarning.
- \sa QtQml::qmlDebug, QtQml::qmlWarning
+ \sa qmlDebug, qmlWarning
*/
/*!
- \fn QQmlInfo QtQml::qmlWarning(const QObject *object)
- \relates QtQml
+ \fn QQmlInfo qmlWarning(const QObject *object)
+ \relates QQmlInfo
\since 5.9
Prints warning messages that include the file and line number for the
@@ -139,36 +109,36 @@ QT_BEGIN_NAMESPACE
QML MyCustomType (unknown location): property cannot be set to 0
\endcode
- \sa QtQml::qmlDebug, QtQml::qmlInfo
+ \sa qmlDebug, qmlInfo
*/
/*!
- \fn QQmlInfo QtQml::qmlDebug(const QObject *object, const QQmlError &error)
+ \fn QQmlInfo qmlDebug(const QObject *object, const QQmlError &error)
\internal
*/
/*!
- \fn QQmlInfo QtQml::qmlDebug(const QObject *object, const QList<QQmlError> &errors)
+ \fn QQmlInfo qmlDebug(const QObject *object, const QList<QQmlError> &errors)
\internal
*/
/*!
- \fn QQmlInfo QtQml::qmlInfo(const QObject *object, const QQmlError &error)
+ \fn QQmlInfo qmlInfo(const QObject *object, const QQmlError &error)
\internal
*/
/*!
- \fn QQmlInfo QtQml::qmlInfo(const QObject *object, const QList<QQmlError> &errors)
+ \fn QQmlInfo qmlInfo(const QObject *object, const QList<QQmlError> &errors)
\internal
*/
/*!
- \fn QQmlInfo QtQml::qmlWarning(const QObject *object, const QQmlError &error)
+ \fn QQmlInfo qmlWarning(const QObject *object, const QQmlError &error)
\internal
*/
/*!
- \fn QQmlInfo QtQml::qmlWarning(const QObject *object, const QList<QQmlError> &errors)
+ \fn QQmlInfo qmlWarning(const QObject *object, const QList<QQmlError> &errors)
\internal
*/
@@ -214,15 +184,28 @@ QQmlInfo::~QQmlInfo()
QObject *object = const_cast<QObject *>(d->object);
if (object) {
- engine = qmlEngine(d->object);
+ // Some objects (e.g. like attached objects created in C++) won't have an associated engine,
+ // but we can still try to look for a parent object that does.
+ QObject *objectWithEngine = object;
+ while (objectWithEngine) {
+ engine = qmlEngine(objectWithEngine);
+ if (engine)
+ break;
+ objectWithEngine = objectWithEngine->parent();
+ }
- d->buffer.prepend(QLatin1String("QML ") + QQmlMetaType::prettyTypeName(object) + QLatin1String(": "));
+ if (!objectWithEngine || objectWithEngine == object) {
+ d->buffer.prepend(QLatin1String("QML ") + QQmlMetaType::prettyTypeName(object) + QLatin1String(": "));
+ } else {
+ d->buffer.prepend(QLatin1String("QML ") + QQmlMetaType::prettyTypeName(objectWithEngine)
+ + QLatin1String(" (parent or ancestor of ") + QQmlMetaType::prettyTypeName(object) + QLatin1String("): "));
+ }
- QQmlData *ddata = QQmlData::get(object, false);
+ QQmlData *ddata = QQmlData::get(objectWithEngine ? objectWithEngine : object, false);
if (ddata && ddata->outerContext) {
error.setUrl(ddata->outerContext->url());
- error.setLine(ddata->lineNumber);
- error.setColumn(ddata->columnNumber);
+ error.setLine(qmlConvertSourceCoordinate<quint16, int>(ddata->lineNumber));
+ error.setColumn(qmlConvertSourceCoordinate<quint16, int>(ddata->columnNumber));
}
}
@@ -237,8 +220,6 @@ QQmlInfo::~QQmlInfo()
}
}
-namespace QtQml {
-
#define MESSAGE_FUNCS(FuncName, MessageLevel) \
QQmlInfo FuncName(const QObject *me) \
{ \
@@ -265,28 +246,4 @@ MESSAGE_FUNCS(qmlDebug, QtMsgType::QtDebugMsg)
MESSAGE_FUNCS(qmlInfo, QtMsgType::QtInfoMsg)
MESSAGE_FUNCS(qmlWarning, QtMsgType::QtWarningMsg)
-
-} // namespace QtQml
-
-#if QT_DEPRECATED_SINCE(5, 1)
-
-// Also define symbols outside namespace to keep binary compatibility with Qt 5.0
-
-QQmlInfo qmlInfo(const QObject *me)
-{
- return QtQml::qmlInfo(me);
-}
-
-QQmlInfo qmlInfo(const QObject *me, const QQmlError &error)
-{
- return QtQml::qmlInfo(me, error);
-}
-
-QQmlInfo qmlInfo(const QObject *me, const QList<QQmlError> &errors)
-{
- return QtQml::qmlInfo(me, errors);
-}
-
-#endif // QT_DEPRECATED_SINCE(5, 1)
-
QT_END_NAMESPACE