From 041c05555f64c5a8ba70c72df3f7269c322b8316 Mon Sep 17 00:00:00 2001 From: Martchus Date: Wed, 10 Oct 2018 20:56:46 +0200 Subject: [PATCH] Add toVariantList()/applyVariantList() to ChecklistModel This makes (de)serializing the state easier when not using QSettings. --- models/checklistmodel.cpp | 27 +++++++++++++++++++++++++++ models/checklistmodel.h | 2 ++ 2 files changed, 29 insertions(+) diff --git a/models/checklistmodel.cpp b/models/checklistmodel.cpp index c427ba3..dca857d 100644 --- a/models/checklistmodel.cpp +++ b/models/checklistmodel.cpp @@ -246,4 +246,31 @@ void ChecklistModel::save(QSettings &settings, const QString &name) const } settings.endArray(); } + +/*! + * \brief Returns the checked IDs. + */ +QVariantList ChecklistModel::toVariantList() const +{ + QVariantList checkedIds; + checkedIds.reserve(m_items.size()); + for (const auto &item : m_items) { + if (item.isChecked()) { + checkedIds << item.id(); + } + } + return checkedIds; +} + +/*! + * \brief Checks all items contained by \a checkedIds and unchecks other items. + */ +void ChecklistModel::applyVariantList(const QVariantList &checkedIds) +{ + for (auto &item : m_items) { + item.m_checkState = checkedIds.contains(item.id()) ? Qt::Checked : Qt::Unchecked; + } + emit dataChanged(index(0), index(m_items.size()), { Qt::CheckStateRole }); +} + } // namespace Models diff --git a/models/checklistmodel.h b/models/checklistmodel.h index d06b18f..27a6da3 100644 --- a/models/checklistmodel.h +++ b/models/checklistmodel.h @@ -90,6 +90,8 @@ public: void setItems(const QList &items); void restore(QSettings &settings, const QString &name); void save(QSettings &settings, const QString &name) const; + QVariantList toVariantList() const; + void applyVariantList(const QVariantList &checkedIds); static constexpr int idRole(); private: