Models registry was added

This commit is contained in:
2023-04-11 09:42:27 +02:00
parent 4a52926be9
commit 4ed4ecd429
17 changed files with 183 additions and 91 deletions

View File

@@ -18,7 +18,6 @@ set(PROJECT_SOURCES
main.cpp main.cpp
qml/qml.qrc qml/qml.qrc
models/basemodel.h models/basemodel.cpp models/basemodel.h models/basemodel.cpp
models/ordersmodel.h models/ordersmodel.cpp
models/usersmodel.h models/usersmodel.cpp models/usersmodel.h models/usersmodel.cpp
viewmodels/usersviewmodel.h viewmodels/usersviewmodel.cpp viewmodels/usersviewmodel.h viewmodels/usersviewmodel.cpp
viewmodels/storesviewmodel.h viewmodels/storesviewmodel.cpp viewmodels/storesviewmodel.h viewmodels/storesviewmodel.cpp
@@ -27,6 +26,7 @@ set(PROJECT_SOURCES
viewmodels/settingsviewmodel.h viewmodels/settingsviewmodel.cpp viewmodels/settingsviewmodel.h viewmodels/settingsviewmodel.cpp
services/beerservice.h services/beerservice.cpp services/beerservice.h services/beerservice.cpp
services/settingsservice.h services/settingsservice.cpp services/settingsservice.h services/settingsservice.cpp
services/modelsregister.h services/modelsregister.cpp
${TS_FILES} ${TS_FILES}
) )

View File

@@ -5,6 +5,8 @@
#include <QTranslator> #include <QTranslator>
#include <QQmlContext> #include <QQmlContext>
#include "models/usersmodel.h"
#include "viewmodels/usersviewmodel.h" #include "viewmodels/usersviewmodel.h"
#include "viewmodels/productsviewmodel.h" #include "viewmodels/productsviewmodel.h"
#include "viewmodels/ordersviewmodel.h" #include "viewmodels/ordersviewmodel.h"
@@ -13,6 +15,7 @@
#include "services/beerservice.h" #include "services/beerservice.h"
#include "services/settingsservice.h" #include "services/settingsservice.h"
#include "services/modelsregister.h"
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
@@ -41,6 +44,8 @@ int main(int argc, char *argv[])
engine.addImportPath("qrc:/"); engine.addImportPath("qrc:/");
ModelsRegister::registerModel(new UsersModel());
engine.rootContext()->setContextProperty("beerService", BeerService::instance()); engine.rootContext()->setContextProperty("beerService", BeerService::instance());
engine.rootContext()->setContextProperty("settingsService", SettingsService::instance()); engine.rootContext()->setContextProperty("settingsService", SettingsService::instance());

View File

@@ -1,15 +0,0 @@
#include "ordersmodel.h"
OrdersModel::OrdersModel(QObject *parent) : BaseModel { "orders", parent }
{
}
QVariantList OrdersModel::orders() const
{
return items();
}
void OrdersModel::submitOrder(const QVariantMap &order) const
{
addItem(order);
}

View File

@@ -1,17 +0,0 @@
#ifndef ORDERSMODEL_H
#define ORDERSMODEL_H
#include "basemodel.h"
class OrdersModel : public BaseModel
{
Q_OBJECT
public:
explicit OrdersModel(QObject *parent = nullptr);
QVariantList orders() const;
void submitOrder(const QVariantMap &order) const;
};
#endif // ORDERSMODEL_H

View File

@@ -26,13 +26,23 @@ Page {
width: parent.width width: parent.width
text: model.title text: model.title
subtitle: settingsService[model.name] subtitle: model.subtitle || ""
function valueAccepted() {
model.value = editor.value
}
function disconnectDialog() {
inputDialog.accepted.disconnect(valueAccepted)
}
onClicked: { onClicked: {
inputDialog.title = model.title inputDialog.title = model.title
inputDialog.name = model.name
inputDialog.control = controls[model.control] inputDialog.control = controls[model.control]
inputDialog.initialValue = model.value
inputDialog.choiceModel = model.choiceModel inputDialog.choiceModel = model.choiceModel
inputDialog.accepted.connect(valueAccepted)
inputDialog.closed.connect(disconnectDialog)
inputDialog.open() inputDialog.open()
} }
} }
@@ -41,8 +51,8 @@ Page {
Dialog { Dialog {
id: inputDialog id: inputDialog
property string name: ""
property var choiceModel: undefined property var choiceModel: undefined
property var initialValue: undefined
property alias control: editor.sourceComponent property alias control: editor.sourceComponent
width: root.width * 0.8 width: root.width * 0.8
@@ -60,10 +70,6 @@ Page {
anchors.fill: parent anchors.fill: parent
} }
onAccepted: {
settingsService[inputDialog.name] = editor.value
}
} }
Component { Component {
@@ -72,10 +78,10 @@ Page {
TextField { TextField {
id: textField id: textField
property alias value: textField.text property string value: text
inputMethodHints: Qt.ImhNoAutoUppercase inputMethodHints: Qt.ImhNoAutoUppercase
text: settingsService[inputDialog.name] || "" text: inputDialog.initialValue || ""
} }
} }
@@ -97,7 +103,7 @@ Page {
property var valueId: modelData.id property var valueId: modelData.id
text: modelData.name text: modelData.name
width: parent.width width: parent.width
checked: settingsService[inputDialog.name] === valueId checked: inputDialog.initialValue === valueId
ButtonGroup.group: group ButtonGroup.group: group
} }
} }

View File

@@ -0,0 +1,23 @@
#include "modelsregister.h"
#include "models/basemodel.h"
void ModelsRegister::registerModel(BaseModel *model)
{
Q_ASSERT(model != nullptr);
model->setParent(&instance()->m_parent);
instance()->m_models[model->entity()] = model;
}
BaseModel *ModelsRegister::model(const QString &name)
{
Q_ASSERT(!name.isEmpty());
if (!instance()->m_models.contains(name)) {
registerModel(new BaseModel(name, &instance()->m_parent));
}
return instance()->m_models.value(name);
}

28
services/modelsregister.h Normal file
View File

@@ -0,0 +1,28 @@
#ifndef MODELSREGISTER_H
#define MODELSREGISTER_H
#include <QMap>
#include <QObject>
class BaseModel;
class ModelsRegister
{
public:
static ModelsRegister *instance()
{
static ModelsRegister i;
return &i;
}
static void registerModel(BaseModel *model);
static BaseModel *model(const QString &name);
private:
ModelsRegister() = default;
~ModelsRegister() = default;
QObject m_parent;
QMap<QString, BaseModel *> m_models;
};
#endif // MODELSREGISTER_H

View File

@@ -2,13 +2,15 @@
#include <QDateTime> #include <QDateTime>
#include "models/basemodel.h"
OrdersViewModel::OrdersViewModel(QObject *parent) OrdersViewModel::OrdersViewModel(QObject *parent)
: QAbstractListModel{parent} : QAbstractListModel{parent}
{ {
connect(&m_ordersModel, &BaseModel::dataChanged, this, &OrdersViewModel::reload); connect(m_ordersModel, &BaseModel::dataChanged, this, &OrdersViewModel::reload);
connect(&m_usersModel, &BaseModel::dataChanged, this, &OrdersViewModel::reload); connect(m_usersModel, &BaseModel::dataChanged, this, &OrdersViewModel::reload);
connect(&m_productsModel, &BaseModel::dataChanged, this, &OrdersViewModel::reload); connect(m_productsModel, &BaseModel::dataChanged, this, &OrdersViewModel::reload);
connect(&m_storesModel, &BaseModel::dataChanged, this, &OrdersViewModel::reload); connect(m_storesModel, &BaseModel::dataChanged, this, &OrdersViewModel::reload);
reload(); reload();
} }
@@ -45,18 +47,18 @@ void OrdersViewModel::reload()
m_model.clear(); m_model.clear();
for (const QVariant &vOrder : m_ordersModel.orders()) { for (const QVariant &vOrder : m_ordersModel->items()) {
QVariantMap order = vOrder.toMap(); QVariantMap order = vOrder.toMap();
QDateTime orderTime = QDateTime::fromSecsSinceEpoch(order.value("ts", 0).toDouble()); QDateTime orderTime = QDateTime::fromSecsSinceEpoch(order.value("ts", 0).toDouble());
order["date"] = orderTime.date(); order["date"] = orderTime.date();
order["time"] = orderTime.time(); order["time"] = orderTime.time();
order["userName"] = m_usersModel.itemProperty(order["userId"].toString(), "name").toString(); order["userName"] = m_usersModel->itemProperty(order["userId"].toString(), "name").toString();
order["storeName"] = m_storesModel.itemProperty(order["storeId"].toString(), "name").toString(); order["storeName"] = m_storesModel->itemProperty(order["storeId"].toString(), "name").toString();
QVariantList prodModel; QVariantList prodModel;
for (const QVariant &prod : order["products"].toList()) { for (const QVariant &prod : order["products"].toList()) {
QVariantMap product = prod.toMap(); QVariantMap product = prod.toMap();
product["product"] = m_productsModel.itemProperty(product.value("productId").toString(), "name"); product["product"] = m_productsModel->itemProperty(product.value("productId").toString(), "name");
prodModel << product; prodModel << product;
} }
order["products"] = prodModel; order["products"] = prodModel;
@@ -64,7 +66,7 @@ void OrdersViewModel::reload()
m_model << order; m_model << order;
} }
std::sort(m_model.begin(), m_model.end(), [](const QVariant &l, const QVariant &r) { std::sort(m_model.begin(), m_model.end(), [](const QVariant &l, const QVariant &r) -> bool {
return l.toMap().value("ts").toDouble() < r.toMap().value("ts").toDouble(); return l.toMap().value("ts").toDouble() < r.toMap().value("ts").toDouble();
}); });

View File

@@ -3,8 +3,7 @@
#include <QAbstractListModel> #include <QAbstractListModel>
#include "models/ordersmodel.h" #include "services/modelsregister.h"
#include "models/usersmodel.h"
class OrdersViewModel : public QAbstractListModel class OrdersViewModel : public QAbstractListModel
{ {
@@ -32,10 +31,10 @@ private:
void reload(); void reload();
OrdersModel m_ordersModel; BaseModel *m_ordersModel = ModelsRegister::model("orders");
UsersModel m_usersModel; BaseModel *m_usersModel = ModelsRegister::model("users");
BaseModel m_productsModel = BaseModel("products", this); BaseModel *m_productsModel = ModelsRegister::model("products");
BaseModel m_storesModel = BaseModel("stores", this); BaseModel *m_storesModel = ModelsRegister::model("stores");
QVariantList m_model; QVariantList m_model;
}; };

View File

@@ -1,17 +1,17 @@
#include "productsviewmodel.h" #include "productsviewmodel.h"
#include "models/basemodel.h"
#include "services/settingsservice.h" #include "services/settingsservice.h"
#include "models/ordersmodel.h"
ProductsViewModel::ProductsViewModel(QObject *parent) ProductsViewModel::ProductsViewModel(QObject *parent)
: QObject{parent} : QObject{parent}
{ {
connect(&m_productsModel, &BaseModel::dataChanged, this, &ProductsViewModel::productsChanged); connect(m_productsModel, &BaseModel::dataChanged, this, &ProductsViewModel::productsChanged);
} }
QVariantList ProductsViewModel::products() const QVariantList ProductsViewModel::products() const
{ {
return m_productsModel.items(); return m_productsModel->items();
} }
QVariantList ProductsViewModel::order() const QVariantList ProductsViewModel::order() const
@@ -19,7 +19,7 @@ QVariantList ProductsViewModel::order() const
QVariantList res; QVariantList res;
for (auto it = m_order.constBegin(); it != m_order.constEnd(); ++it) { for (auto it = m_order.constBegin(); it != m_order.constEnd(); ++it) {
QVariantMap product = m_productsModel.item(it.key()); QVariantMap product = m_productsModel->item(it.key());
product["count"] = it.value().toMap().value("quantity").toDouble(); product["count"] = it.value().toMap().value("quantity").toDouble();
res << product; res << product;
} }
@@ -32,7 +32,7 @@ float ProductsViewModel::orderSum() const
float res = 0.0; float res = 0.0;
for (auto it = m_order.constBegin(); it != m_order.constEnd(); ++it) { for (auto it = m_order.constBegin(); it != m_order.constEnd(); ++it) {
QVariantMap product = m_productsModel.item(it.key()); QVariantMap product = m_productsModel->item(it.key());
float price = product.value("price", 0.0).toFloat(); float price = product.value("price", 0.0).toFloat();
float quantity = it.value().toMap().value("quantity").toDouble(); float quantity = it.value().toMap().value("quantity").toDouble();
res += quantity * price; res += quantity * price;
@@ -44,7 +44,7 @@ float ProductsViewModel::orderSum() const
void ProductsViewModel::setOrderValue(const QString &productId, float value) void ProductsViewModel::setOrderValue(const QString &productId, float value)
{ {
if (value) { if (value) {
float price = m_productsModel.itemProperty(productId, "price", 0.0).toFloat(); float price = m_productsModel->itemProperty(productId, "price", 0.0).toFloat();
m_order[productId] = QVariantMap { m_order[productId] = QVariantMap {
{ "productId", productId }, { "productId", productId },
{ "quantity", value}, { "quantity", value},
@@ -59,8 +59,8 @@ void ProductsViewModel::setOrderValue(const QString &productId, float value)
void ProductsViewModel::submitOrder() void ProductsViewModel::submitOrder()
{ {
OrdersModel model; BaseModel *ordersModel = ModelsRegister::model("orders");
model.submitOrder(QVariantMap { ordersModel->addItem({
{ "userId", settings()->selectedUserId() }, { "userId", settings()->selectedUserId() },
{ "storeId", settings()->selectedStoreId() }, { "storeId", settings()->selectedStoreId() },
{ "products", m_order.values() }, { "products", m_order.values() },

View File

@@ -2,8 +2,9 @@
#define PRODUCTSVIEWMODEL_H #define PRODUCTSVIEWMODEL_H
#include <QObject> #include <QObject>
#include <QVariantMap>
#include "models/basemodel.h" #include "services/modelsregister.h"
class SettingsService; class SettingsService;
class ProductsViewModel : public QObject class ProductsViewModel : public QObject
@@ -31,7 +32,7 @@ signals:
private: private:
SettingsService *settings() const; SettingsService *settings() const;
BaseModel m_productsModel = BaseModel("products", this); BaseModel *m_productsModel = ModelsRegister::model("products");
QVariantMap m_order; QVariantMap m_order;
}; };

View File

@@ -1,5 +1,10 @@
#include "settingsviewmodel.h" #include "settingsviewmodel.h"
#include "services/modelsregister.h"
#include "services/settingsservice.h"
#include "models/basemodel.h"
SettingsViewModel::SettingsViewModel(QObject *parent) SettingsViewModel::SettingsViewModel(QObject *parent)
: QAbstractListModel{parent} : QAbstractListModel{parent}
{ {
@@ -7,10 +12,16 @@ SettingsViewModel::SettingsViewModel(QObject *parent)
<< SettingItem { tr("Selected user id"), "selectedUserId", "choice", "users" } << SettingItem { tr("Selected user id"), "selectedUserId", "choice", "users" }
<< SettingItem { tr("Selected store"), "selectedStoreId", "choice", "stores" }; << SettingItem { tr("Selected store"), "selectedStoreId", "choice", "stores" };
m_models["users"] = new BaseModel("users", this); QModelIndex selectedUserIdIndex = index(1);
m_models["stores"] = new BaseModel("stores", this); QModelIndex selectedStoreIdIndex = index(2);
}
connect(settings(), &SettingsService::selectedUserIdChanged, this, [this, selectedUserIdIndex]() {
emit dataChanged(selectedUserIdIndex, selectedUserIdIndex);
});
connect(settings(), &SettingsService::selectedStoreIdChanged, this, [this, selectedStoreIdIndex]() {
emit dataChanged(selectedStoreIdIndex, selectedStoreIdIndex);
});
}
int SettingsViewModel::rowCount(const QModelIndex &) const int SettingsViewModel::rowCount(const QModelIndex &) const
{ {
@@ -27,7 +38,8 @@ QVariant SettingsViewModel::data(const QModelIndex &index, int role) const
switch (role) { switch (role) {
case Roles::Title: return item.title; case Roles::Title: return item.title;
case Roles::PropertyName: return item.propertyName; case Roles::Subtitle: return subtitle(item.propertyName, item.modelName);
case Roles::Value: return settings()->property(item.propertyName.toLocal8Bit());
case Roles::ControlType: return item.controlType; case Roles::ControlType: return item.controlType;
case Roles::Model: return model(item.modelName); case Roles::Model: return model(item.modelName);
default: default:
@@ -41,17 +53,59 @@ QHash<int, QByteArray> SettingsViewModel::roleNames() const
{ {
return QHash<int, QByteArray> { return QHash<int, QByteArray> {
{ Roles::Title, "title" }, { Roles::Title, "title" },
{ Roles::PropertyName, "name" }, { Roles::Subtitle, "subtitle" },
{ Roles::Value, "value" },
{ Roles::ControlType, "control" }, { Roles::ControlType, "control" },
{ Roles::Model, "choiceModel" } { Roles::Model, "choiceModel" }
}; };
} }
bool SettingsViewModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (!index.isValid()) {
return false;
}
if (Roles::Value != role) {
return false;
}
SettingItem item = m_items.at(index.row());
bool res = settings()->setProperty(item.propertyName.toLocal8Bit(), value);
if (res) {
emit dataChanged(index, index);
}
return res;
}
Qt::ItemFlags SettingsViewModel::flags(const QModelIndex &index) const
{
return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
}
SettingsService *SettingsViewModel::settings() const
{
return SettingsService::instance();
}
QVariant SettingsViewModel::model(const QString &modelName) const QVariant SettingsViewModel::model(const QString &modelName) const
{ {
if (!m_models.contains(modelName)) { BaseModel *model = modelName.isEmpty() ? nullptr : ModelsRegister::model(modelName);
if (!model) {
return {}; return {};
} }
return m_models[modelName]->items(); return model->items();
}
QVariant SettingsViewModel::subtitle(const QString &propertyName, const QString &modelName) const
{
BaseModel *model = modelName.isEmpty() ? nullptr : ModelsRegister::model(modelName);
QVariant propertyValue = settings()->property(propertyName.toLocal8Bit());
if (model) {
return model->itemProperty(propertyValue.toString(), "name");
}
return propertyValue;
} }

View File

@@ -3,8 +3,7 @@
#include <QAbstractListModel> #include <QAbstractListModel>
#include "models/basemodel.h" class SettingsService;
class SettingsViewModel : public QAbstractListModel class SettingsViewModel : public QAbstractListModel
{ {
Q_OBJECT Q_OBJECT
@@ -16,10 +15,14 @@ public:
QVariant data(const QModelIndex &index, int role) const override; QVariant data(const QModelIndex &index, int role) const override;
QHash<int, QByteArray> roleNames() const override; QHash<int, QByteArray> roleNames() const override;
bool setData(const QModelIndex &index, const QVariant &value, int role) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
private: private:
enum Roles { enum Roles {
Title = Qt::UserRole + 1, Title = Qt::UserRole + 1,
PropertyName, Subtitle,
Value,
ControlType, ControlType,
Model Model
}; };
@@ -38,10 +41,11 @@ private:
modelName(modelName) {} modelName(modelName) {}
}; };
SettingsService *settings() const;
QVariant model(const QString &modelName) const; QVariant model(const QString &modelName) const;
QVariant subtitle(const QString &propertyName, const QString &modelName) const;
QList<SettingItem> m_items; QList<SettingItem> m_items;
QMap<QString, BaseModel *> m_models;
}; };
#endif // SETTINGSVIEWMODEL_H #endif // SETTINGSVIEWMODEL_H

View File

@@ -1,12 +1,13 @@
#include "storesviewmodel.h" #include "storesviewmodel.h"
#include "models/basemodel.h"
#include "services/settingsservice.h" #include "services/settingsservice.h"
StoresViewModel::StoresViewModel(QObject *parent) StoresViewModel::StoresViewModel(QObject *parent)
: QObject{parent} : QObject{parent}
{ {
connect(&m_storesModel, &BaseModel::dataChanged, this, &StoresViewModel::storesChanged); connect(m_storesModel, &BaseModel::dataChanged, this, &StoresViewModel::storesChanged);
connect(&m_storesModel, &BaseModel::dataChanged, this, &StoresViewModel::selectedStoreNameChanged); connect(m_storesModel, &BaseModel::dataChanged, this, &StoresViewModel::selectedStoreNameChanged);
connect(settings(), &SettingsService::selectedStoreIdChanged, this, &StoresViewModel::selectedStoreChanged); connect(settings(), &SettingsService::selectedStoreIdChanged, this, &StoresViewModel::selectedStoreChanged);
connect(settings(), &SettingsService::selectedStoreIdChanged, this, &StoresViewModel::selectedStoreNameChanged); connect(settings(), &SettingsService::selectedStoreIdChanged, this, &StoresViewModel::selectedStoreNameChanged);
@@ -14,7 +15,7 @@ StoresViewModel::StoresViewModel(QObject *parent)
QVariantList StoresViewModel::stores() const QVariantList StoresViewModel::stores() const
{ {
return m_storesModel.items(); return m_storesModel->items();
} }
QString StoresViewModel::selectedStore() const QString StoresViewModel::selectedStore() const
@@ -29,7 +30,7 @@ void StoresViewModel::setSelectedStore(const QString &newSelectedStore)
QString StoresViewModel::selectedStoreName() const QString StoresViewModel::selectedStoreName() const
{ {
return m_storesModel.itemProperty(selectedStore(), "name").toString(); return m_storesModel->itemProperty(selectedStore(), "name").toString();
} }
SettingsService *StoresViewModel::settings() const SettingsService *StoresViewModel::settings() const

View File

@@ -3,7 +3,7 @@
#include <QObject> #include <QObject>
#include "models/basemodel.h" #include "services/modelsregister.h"
class SettingsService; class SettingsService;
class StoresViewModel : public QObject class StoresViewModel : public QObject
@@ -30,7 +30,7 @@ signals:
private: private:
SettingsService *settings() const; SettingsService *settings() const;
BaseModel m_storesModel = BaseModel("stores", this); BaseModel *m_storesModel = ModelsRegister::model("stores");
}; };
#endif // STORESVIEWMODEL_H #endif // STORESVIEWMODEL_H

View File

@@ -1,12 +1,13 @@
#include "usersviewmodel.h" #include "usersviewmodel.h"
#include "models/basemodel.h"
#include "services/settingsservice.h" #include "services/settingsservice.h"
UsersViewModel::UsersViewModel(QObject *parent) UsersViewModel::UsersViewModel(QObject *parent)
: QObject{parent} : QObject{parent}
{ {
connect(&m_usersModel, &BaseModel::dataChanged, this, &UsersViewModel::usersChanged); connect(m_usersModel, &BaseModel::dataChanged, this, &UsersViewModel::usersChanged);
connect(&m_usersModel, &BaseModel::dataChanged, this, &UsersViewModel::selectedUserNameChanged); connect(m_usersModel, &BaseModel::dataChanged, this, &UsersViewModel::selectedUserNameChanged);
connect(settings(), &SettingsService::selectedUserIdChanged, this, &UsersViewModel::selectedUserChanged); connect(settings(), &SettingsService::selectedUserIdChanged, this, &UsersViewModel::selectedUserChanged);
connect(settings(), &SettingsService::selectedUserIdChanged, this, &UsersViewModel::selectedUserNameChanged); connect(settings(), &SettingsService::selectedUserIdChanged, this, &UsersViewModel::selectedUserNameChanged);
@@ -14,7 +15,7 @@ UsersViewModel::UsersViewModel(QObject *parent)
QVariantList UsersViewModel::users() const QVariantList UsersViewModel::users() const
{ {
return m_usersModel.users(); return m_usersModel->items();
} }
QString UsersViewModel::selectedUser() const QString UsersViewModel::selectedUser() const
@@ -29,7 +30,7 @@ void UsersViewModel::setSelectedUser(const QString &newSelectedUser)
QString UsersViewModel::selectedUserName() const QString UsersViewModel::selectedUserName() const
{ {
return m_usersModel.itemProperty(selectedUser(), "name").toString(); return m_usersModel->itemProperty(selectedUser(), "name").toString();
} }
SettingsService *UsersViewModel::settings() const SettingsService *UsersViewModel::settings() const

View File

@@ -3,7 +3,7 @@
#include <QObject> #include <QObject>
#include "models/usersmodel.h" #include "services/modelsregister.h"
class SettingsService; class SettingsService;
class UsersViewModel : public QObject class UsersViewModel : public QObject
@@ -30,7 +30,7 @@ signals:
private: private:
SettingsService *settings() const; SettingsService *settings() const;
UsersModel m_usersModel; BaseModel *m_usersModel = ModelsRegister::model("users");
}; };
#endif // USERSVIEWMODEL_H #endif // USERSVIEWMODEL_H