Михаил СермяжкоMarch 29, 2022, 2:42 p.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!
B
- Bogdannn
- March 28, 2024, 7:15 a.m.
C++ - Test 001. The first program and data types
- Result:46points,
- Rating points-6
Last comments
Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоFeb. 5, 2024, 2:50 p.m.
EVADec. 25, 2023, 11:30 p.m.
Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Now discuss on the forum
Как получить в массив значения из связанной модели? Спасибо, разобрался:))
AC
QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…
Alexandru CodreanuJan. 20, 2024, 12:57 a.m.
BlinCTDec. 27, 2023, 9:57 p.m.
ДмитрийJan. 10, 2024, 5:18 p.m.
Evgenii LegotckoiDec. 12, 2023, 7:48 p.m.
Добрый день
Обычно представление модели в QML действует вполне нормально, когда модель испускает сигнал dataChanged.
То есть по сушеству вам нужно его испускать в тот момент, когда данные действительно изменились. Ну и соответсвенно с тем диапазоном индексов, которые содержат измененные даные.