提问人:user2377283 提问时间:1/21/2023 更新时间:1/21/2023 访问量:67
QT QML QAbstractListModel 删除函数错误
QT QML QAbstractListModel deleted function error
问:
我正在尝试将 c++ 用户模型传递给 qml 并得到一个我不明白的错误。
我使用一个管理器类,它应该读取用户并填充列表模型。
列表模型本身应该通过 Q_PROPERTY 传递给 qml。
manager 类在 qml 上下文中是已知的。
在管理器类的 public 方法中,编译器告诉我私有m_listModel是一个已删除的函数。
用户管理器.h
#pragma once
#include <QObject>
#include <QMap>
#include "UserListModel.h"
class UserManager : public QObject
{
Q_OBJECT
public:
explicit UserManager(QObject* parent = nullptr);
Q_PROPERTY(UserListModel model READ getModel)
UserListModel getModel() { return m_listModel; }
private:
UserListModel m_listModel;
};
UserListModel getModel() { return m_listModel; } 给出错误 m_listModel
错误是这个
error C2280: "UserListModel::UserListModel(const UserListModel &)" : Es wurde versucht, auf eine gelöschte Funktion zu verweisen
UserManager.cpp
#include "UserManager.h"
UserManager::UserManager(QObject* parent)
{
}
void UserManager::initialize(QMap<QString, QString> args)
{
m_listModel.addModel(UserModel("user1", "0000"));
m_listModel.addModel(UserModel("user2", "9999"));
}
UserListModel.h
#pragma once
#include <QObject>
#include <QAbstractListModel>
struct UserModel {
UserModel() {}
UserModel(const QString name, const QString password) : name(name), password(password) {}
QString name;
QString password;
};
class UserListModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit UserListModel(QObject* parent = 0);
enum Roles { NameRole = Qt::UserRole, PasswordRole };
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
QHash<int, QByteArray> roleNames() const override;
void addModel(const UserModel model);
private:
QList<UserModel> m_models;
};
UserListModel.cpp
#include "UserListModel.h"
UserListModel::UserListModel(QObject* parent)
{
}
int UserListModel::rowCount(const QModelIndex& parent) const
{
return m_models.count();
}
QVariant UserListModel::data(const QModelIndex& index, int role) const
{
if (!index.isValid()) return QVariant();
const UserModel user = m_models.at(index.row());
if (role == NameRole) return user.name;
else if (role == PasswordRole) return user.password;
else return QVariant();
}
QHash<int, QByteArray> UserListModel::roleNames() const
{
static QHash<int, QByteArray> mapping{ {NameRole, "name"}, {PasswordRole, "password"} };
return mapping;
}
void UserListModel::addModel(const UserModel model)
{
beginInsertRows(QModelIndex(), rowCount(), rowCount());
m_models << model;
endInsertRows();
}
对不起,如果这是初学者的错误,我才刚刚开始学习 qt 和 c++。
答: 暂无答案
评论
UserListModel getModel() { return m_listModel; }
UserListModel& getModel() { return m_listModel; }
const UserListModel& getModel() const { return m_listModel; }