一、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/zh-tw/n/254872.html