diff --git a/Modules/energy/batterymodel.cpp b/Modules/energy/batterymodel.cpp --- a/Modules/energy/batterymodel.cpp +++ b/Modules/energy/batterymodel.cpp @@ -73,7 +73,12 @@ } if (role == BatteryRole) { - return QVariant::fromValue(m_batteries.value(index.row()).as()); + // .as returns a pointer to a casted DeviceInterface. This pointer must + // not, under any circumstances, be deleted outside Solid! + // https://bugs.kde.org/show_bug.cgi?id=413003 + const auto battery = m_batteries.value(index.row()).as(); + QQmlEngine::setObjectOwnership(battery, QQmlEngine::CppOwnership); + return QVariant::fromValue(battery); } else if (role == ProductRole) { const Solid::Device device = m_batteries.value(index.row()); return device.product();