Add toVariantList()/applyVariantList() to ChecklistModel

This makes (de)serializing the state easier when not using
QSettings.
This commit is contained in:
Martchus 2018-10-10 20:56:46 +02:00
parent 36f3c71a66
commit 041c05555f
2 changed files with 29 additions and 0 deletions

View File

@ -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

View File

@ -90,6 +90,8 @@ public:
void setItems(const QList<ChecklistItem> &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: