feat(StatusQ/Testing): invert method added TestModel emiting valid layoutChanged

This commit is contained in:
Michał Cieślak 2024-02-22 14:49:33 +01:00 committed by Alex Jbanca
parent be218c22cd
commit 1639f1f9e7
2 changed files with 21 additions and 1 deletions

View File

@ -1,5 +1,6 @@
#include "testmodel.h"
#include <algorithm>
TestModel::TestModel(QList<QPair<QString, QVariantList>> data)
: m_data(std::move(data))
@ -82,6 +83,22 @@ void TestModel::remove(int index)
endRemoveRows();
}
void TestModel::invert()
{
emit layoutAboutToBeChanged();
for (auto& entry : m_data)
std::reverse(entry.second.begin(), entry.second.end());
const auto persistentIndexes = persistentIndexList();
const auto count = rowCount();
for (const QModelIndex& index: persistentIndexes)
changePersistentIndex(index, createIndex(count - index.row() - 1, 0));
emit layoutChanged();
}
void TestModel::initRoles()
{
m_roles.reserve(m_data.size());

View File

@ -8,7 +8,7 @@ public:
explicit TestModel(QList<QPair<QString, QVariantList>> data);
explicit TestModel(QList<QString> roles);
int rowCount(const QModelIndex& parent) const override;
int rowCount(const QModelIndex& parent = {}) const override;
QHash<int, QByteArray> roleNames() const override;
QVariant data(const QModelIndex& index, int role) const override;
@ -16,6 +16,9 @@ public:
void update(int index, int role, QVariant value);
void remove(int index);
// inverts order of items, emits layoutAboutToBeChanged / layoutChanged
void invert();
private:
void initRoles();