Qt 如何应用和查看用户角色?

Qt 如何应用和查看用户角色?,qt,qt5,Qt,Qt5,我正在尝试创建自定义模型,并希望它与自定义角色一起工作。但是我真的不明白怎么做。此外,我希望将我的模型与qt小部件一起使用,而不是与QML视图一起使用。角色如何应用于某些项目? 如何设置ListView,以便可以使用我的自定义角色 我知道我需要创建enum,并重新实现roleNames函数 我的model.h文件 class ListModel:公共QAbstractListModel { Q_对象 Q_属性(整数计数读取计数通知计数已更改) 公众: ListModel(); virtual~L

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

我知道我需要创建enum,并重新实现roleNames函数

我的model.h文件

class ListModel:公共QAbstractListModel
{
Q_对象
Q_属性(整数计数读取计数通知计数已更改)
公众:
ListModel();
virtual~ListModel()覆盖;
枚举自定义角色{
RoleType=Qt::UserRole+1,
钮扣孔,
CheckboxRole,
};
受保护的:
QList项目列表;
QHash_角色;
//int _RowCount=0;
公众:
无效添加(基本项*项);
BaseItems*getItem(整数索引);
无效清除();
int count()常量;
int rowCount(const QModelIndex&parent=QModelIndex())常量重写;
QVariant数据(常量QModelIndex&index,int-role=Qt::DisplayRole)常量覆盖;
QHash roleNames()常量重写;
Q_信号:
void countChanged();
};
我的model.cpp文件

ListModel::ListModel():QAbstractListModel()
{
}
ListModel::~ListModel()
{
itemList.clear();
}
void ListModel::Add(BaseItems*item)
{
beginInsertRows(QModelIndex(),itemList.count(),itemList.count());
itemList.append(项目);
endInsertRows();
Q_EMIT countChanged();
}
BaseItems*ListModel::getItem(int索引)
{
返回itemList.at(索引);
}
void ListModel::clear()
{
qDeleteAll(项目列表);
itemList.clear();
}
int ListModel::count()常量
{
返回rowCount();
}
int ListModel::行计数(常量QModelIndex&parent)常量
{
Q_未使用(家长)
返回itemList.count();
}
QVariant ListModel::数据(常量QModelIndex&index,int角色)常量
{
ItemButton*button=dynamic_cast(itemList.at(index.row());
如果(!index.isValid())
返回QVariant();
如果(index.row()>=itemList.count())
返回QVariant();
交换机(角色)
{
案例Qt::DisplayRole:{
返回QVariant::fromValue(按钮->文本);}
外壳按钮孔:{
返回QVariant::fromValue(按钮->文本);}
}
返回QVariant();
}
QHash ListModel::roleNames()常量{
QHash角色;
角色[RoleType]=“第一”;
角色[ButtonRole]=“最后一个”;
返回角色;
}
您最好有意义地命名角色,而不是“第一个”和“最后一个”:

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

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

传递给QML
view->rootContext()->setContextProperty("listModel", listModel);
或者,您可以在QML中创建ListModel的实例,但在cpp文件中,您必须注册ListModel类型

qmlRegisterType<ListModel>("ListModel", 1, 0, "ListModel");
最后,通过

ListModel {
    id: listModel
}

您想将您的模型与Qt小部件或QML视图一起使用吗?我想将其与Qt小部件一起使用是Qt模型/视图的良好开端
import ListModel 1.0
ListModel {
    id: listModel
}