According to Qt documentation:
Data Ownership
When data is transferred from C++ to QML, the ownership of the data always remains with C++. The exception to this rule is when a QObject is returned from an explicit C++ method call: in this case, the QML engine assumes ownership of the object, unless the ownership of the object has explicitly been set to remain with C++ by invoking QQmlEngine::setObjectOwnership() with QQmlEngine::CppOwnership specified.
It means that call of getter function of properties doesn't change ownership.
When i have some derived from QObject class with properties of simple type(int, QString...), registered in QML (via qmlRegisterSingletonType) and used as CppOwnership instance.
{
Q_OBJECT
public:
Q_PROPERTY (QColor color READ colorValue NOTIFY colorChanged
) {
return m_color;
}
signals:
void colorChanged();
private:
};
class TCustomDraw: public QObject
{
Q_OBJECT
public:
Q_PROPERTY (QColor color READ colorValue NOTIFY colorChanged)
QColor colorValue() const
{
return m_color;
}
signals:
void colorChanged();
private:
QColor m_color;
};
To copy to clipboard, switch view to plain text mode
And QML main window:
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Dialogs 1.1
import QtQuick.Layouts 1.0
]import QtQuick.Window 2.12
import Qt.labs.platform 1.1
import QtQml 2.12
import QtQuick.Shapes 1.12
import customdraw 1.0
Window {
id: wnd
width: 640
height: 480
visible: true
Button {
anchors.fill: parent
onClicked: {
var f = TCustomDraw.color
}
}
}
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Dialogs 1.1
import QtQuick.Layouts 1.0
]import QtQuick.Window 2.12
import Qt.labs.platform 1.1
import QtQml 2.12
import QtQuick.Shapes 1.12
import customdraw 1.0
Window {
id: wnd
width: 640
height: 480
visible: true
Button {
anchors.fill: parent
onClicked: {
var f = TCustomDraw.color
}
}
}
To copy to clipboard, switch view to plain text mode
What happens with ownership of color object when i press the Button ?
If ownership of color object remains in c++ does it mean a memory leakage ?
Bookmarks