如何应用和查看用户角色



我正在尝试创建自定义模型,并希望它与自定义角色一起使用。但是我真的不明白该怎么做。另外,我想将我的模型与QT小部件一起使用,而不是QML视图。角色如何适用于某些项目?如何设置ListView,以便可以使用我的自定义角色?

我知道我需要创建枚举,并重新进化rolenames函数

我的模型.h文件

class ListModel : public QAbstractListModel
{
    Q_OBJECT
    Q_PROPERTY(int count READ count NOTIFY countChanged)
public:
    ListModel();
    virtual ~ListModel() override;
    enum CustomRoles{
        RoleType=Qt::UserRole+1,
        ButtonRole,
        CheckboxRole,
    };
protected:
    QList<BaseItems*> itemList;
    QHash<int, QByteArray> _roles;
   // int _RowCount = 0;
public:
    void Add(BaseItems* item);
    BaseItems* getItem(int index);
    void clear();
    int count() const;
    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;
Q_SIGNALS:
    void countChanged();
};

我的模型.cpp文件

ListModel::ListModel() : QAbstractListModel()
{

}
ListModel::~ListModel()
{
    itemList.clear();
}

void ListModel::Add(BaseItems *item)
{
    beginInsertRows(QModelIndex(),itemList.count(),itemList.count());
    itemList.append(item);
    endInsertRows();
    Q_EMIT countChanged();
}
BaseItems* ListModel::getItem(int index)
{
    return itemList.at(index);
}

void ListModel::clear()
{
    qDeleteAll(itemList);
    itemList.clear();
}

int ListModel::count() const
{
    return rowCount();
}

int ListModel::rowCount(const QModelIndex &parent) const
{
    Q_UNUSED(parent)
    return itemList.count();
}

QVariant ListModel::data(const QModelIndex &index, int role) const
{
     ItemButton *button = dynamic_cast<ItemButton*>(itemList.at(index.row()));
    if (!index.isValid())
            return QVariant();
    if (index.row() >= itemList.count())
            return QVariant();
    switch (role)
    {
    case Qt::DisplayRole:{
        return QVariant::fromValue(button->Text);}
    case ButtonRole:{
        return QVariant::fromValue(button->Text);}
    }
    return QVariant();
}
QHash<int, QByteArray> ListModel::roleNames() const {
    QHash<int, QByteArray> role;
    role[RoleType] = "first";
    role[ButtonRole] = "last";
    return role;
}

,而不是"第一个"one_answers"最后"更好地说出角色:

QHash<int, QByteArray> ListModel::roleNames() const {
    QHash<int, QByteArray> role;
    role[RoleType] = "roleType";
    role[ButtonRole] = "buttonRole";
    return role;
}

因此,将使用这些引用的名称。如果要在QML中显示此模型的数据,则可以执行类似的操作:

ListView {
    width: 100
    height: 500
    model: listModel
    delegate: Text {
        text: model.roleType + model.buttonRole
    }
}

listModel对象可以在C 中初始化,可以使用

传递给QML
view->rootContext()->setContextProperty("listModel", listModel);

或者您可以在QML中制作listModel的实例,但是在CPP文件中,您必须注册您的ListModel Type

qmlRegisterType<ListModel>("ListModel", 1, 0, "ListModel");

然后在QML文件中:

import ListModel 1.0

最终通过

创建模型实例
ListModel {
    id: listModel
}

相关内容

  • 没有找到相关文章