Михаил СермяжкоMarch 29, 2022, 4:42 a.m.
Автоматически обновляться от QAbstractModel
Добрый день.
Наследовал QAbstractModel на с++ и использую ее в QML. Как автоматом обновлять данные в QML при изменении данных в QAbstractModel?
Попробовал с помощью void emitSignalUpdateModel();, но не получилось.
Q_PROPERTY для QML
Q_PROPERTY(ModelRegistration* modelRegistration MEMBER m_modelRegistration CONSTANT)
.h
#ifndef MODELREGISTRATION_H #define MODELREGISTRATION_H #include <QObject> #include <QAbstractListModel> struct RegistrationObject { RegistrationObject(int id, QString name, bool isDone) { m_id = id; m_name = name; m_isDone = isDone; } int m_id; QString m_name; bool m_isDone; }; class ModelRegistration : public QAbstractListModel { Q_OBJECT public: ModelRegistration(QObject *parent = nullptr); enum RoleNames { IdRole = Qt::UserRole, NameRole, IsDoneRole }; QVector<RegistrationObject> vectorDataRegistration; int rowCount(const QModelIndex& parent = QModelIndex()) const override; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; public slots: void emitSignalUpdateModel(); protected: QHash<int, QByteArray> roleNames() const override; }; #endif // MODELREGISTRATION_H
.cpp
#include "modelregistration.h" ModelRegistration::ModelRegistration(QObject *parent) : QAbstractListModel(parent) { vectorDataRegistration.append(RegistrationObject(1, "Legs (back)", false)); vectorDataRegistration.append(RegistrationObject(2, "Hips (back)", false)); vectorDataRegistration.append(RegistrationObject(3, "Back", false)); vectorDataRegistration.append(RegistrationObject(3, "Arms (back)", false)); vectorDataRegistration.append(RegistrationObject(3, "Hips (front)", false)); vectorDataRegistration.append(RegistrationObject(4, "Belly", false)); vectorDataRegistration.append(RegistrationObject(3, "Arms (front)", false)); } int ModelRegistration::rowCount(const QModelIndex &parent) const { return vectorDataRegistration.count(); } QVariant ModelRegistration::data(const QModelIndex &index, int role) const { if (index.row() < 0 || index.row() >= vectorDataRegistration.count()) return QVariant(); switch (role) { case IdRole: return vectorDataRegistration[index.row()].m_id; case NameRole: return vectorDataRegistration[index.row()].m_name; case IsDoneRole: return vectorDataRegistration[index.row()].m_isDone; } return QVariant(); } void ModelRegistration::emitSignalUpdateModel() { auto index = this->index(0); emit dataChanged(index, index, QVector<int>{0,1,2}); } QHash<int, QByteArray> ModelRegistration::roleNames() const { QHash<int, QByteArray> roles; roles[IdRole] = "id"; roles[NameRole] = "name"; roles[IsDoneRole] = "isDone"; return roles; }
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
AD
- Akiv Doros
- Nov. 11, 2024, 2:58 p.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:50points,
- Rating points-4
m
- molni99
- Oct. 26, 2024, 1:37 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
m
- molni99
- Oct. 26, 2024, 1:29 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:20points,
- Rating points-10
Last comments
Evgenii LegotckoiOct. 31, 2024, 2:37 p.m.
Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь МаксимовOct. 5, 2024, 7:51 a.m.
QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Now discuss on the forum
Evgenii LegotckoiJune 24, 2024, 3:11 p.m.
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey1Nov. 15, 2024, 6:04 a.m.
NSProjectJune 4, 2022, 3:49 a.m.
IscanderCheOct. 31, 2024, 3:43 p.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
Добрый день
Обычно представление модели в QML действует вполне нормально, когда модель испускает сигнал dataChanged.
То есть по сушеству вам нужно его испускать в тот момент, когда данные действительно изменились. Ну и соответсвенно с тем диапазоном индексов, которые содержат измененные даные.