一、QStandardItemModel的概述
QStandardItemModel是一种模型/视图体系结构中的model,用于在其内部组织存储数据。它提供了一个统一的接口来展示数据、提供数据(以供修改)和搜索功能。QStandardItemModel可以展示一系列标准项,这些标准项能够以层次结构的形式展示、增加、删除。每个标准项都可以存储任意数量的数据。
// 样例代码1 创建QStandardItemModel,设置表头,然后添加数据
QStandardItemModel *model = new QStandardItemModel;
model->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("Name")));
model->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("Gender")));
model->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("Age")));
QList<QStandardItem *> itemList;
itemList << new QStandardItem("Tom") << new QStandardItem("Male") << new QStandardItem("20");
model->appendRow(itemList);
itemList.clear();
itemList << new QStandardItem("Jane") << new QStandardItem("Female") << new QStandardItem("25");
model->appendRow(itemList);
二、QStandardItemModel数据获取方法
1、获取整列表格数据
下面给出的代码可以获取整个QStandardItemModel的数据。代码将会返回一张表格,表格的行列数与QStandardItemModel的行列数相同,保存了每个单元格的数据。
// 样例代码2 获取QStandardItemModel整个表格数据
int row = model->rowCount();
int column = model->columnCount();
QList<QList<QString>> tableData;
for (int i = 0; i < row; i++)
{
QList<QString> rowData;
for (int j = 0; j < column; j++)
{
rowData.append(model->item(i, j)->text());
}
tableData.append(rowData);
}
2、获取特定行的数据
可以用QStandardItemModel::takeRow()方法提取指定行的数据,该方法返回一个QList<QStandardItem *>对象,该对象中存储了QStandardItem指针对象,可以通过getData()方法获取单元格数据。
// 样例代码3 提取第一行的数据
QList<QStandardItem *> itemList = model->takeRow(0);
for (auto &item : itemList) {
QString data = item->data().toString();
}
3、获取指定列的数据
可以用QStandardItemModel::takeColumn()方法提取指定列的数据,该方法返回一个QList<QStandardItem *>对象,该对象中存储了QStandardItem指针对象,可以通过getData()方法获取单元格数据。
// 样例代码4 提取第一列的数据
QList<QStandardItem *> itemList = model->takeColumn(0);
for (auto &item : itemList) {
QString data = item->data().toString();
}
4、按条件搜索特定数据
可以使用QStandardItemModel::findItems()方法来搜索符合条件的项。该方法会返回搜索到的QStandardItem对象列表。
// 样例代码5 模糊搜索
QString keyword = "Tom";
QList<QStandardItem *> itemList = model->findItems(keyword, Qt::MatchContains);
for (auto &item : itemList) {
QString data = item->data().toString();
}
5、QStandardItem如何存储数据
QStandardItemModel中的每个标准项(QStandardItem对象)都可以存储多个角色数据,比如显示数据、用户数据、状态数据等。通过getItemData()方法可以获取该项的全部数据。
// 样例代码6 获取第一项(0,0)的角色数据
QList<QVariant> roleData = model->item(0, 0)->data(Qt::DisplayRole);
for (auto &var : roleData) {
QString data = var.toString();
}
三、总结
QStandardItemModel是一种方便易用的数据模型,通过它能够快速很多的完成不同场景下的数据展示与处理。在实际开发中,我们可以利用QStandardItem类的丰富接口,高效地提取、组织并存储任意数据,从而更好地处理各种UI类型的数据展示需求。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/254872.html