1、QStandardItemModel 类提供了用于存储自定义数据的通用模型。
2、QStandardItemModel 可用作标准 Qt 数据类型的存储库。 它是模型/视图类之一,是 Qt 模型/视图框架的一部分
3、QStandardItemModel 提供了一种经典的基于项目的方法来处理模型。 QStandardItemModel 中的项目由 QStandardItem 提供。
4、QStandardItemModel 实现了 QAbstractItemModel 接口,这意味着该模型可用于在支持该接口的任何视图(例如 QListView、QTableView 和 QTreeView,以及您自己的自定义视图)中提供数据。 为了性能和灵活性,您可能希望继承 QAbstractItemModel 以提供对不同类型数据存储库的支持。 例如,QDirModel 为底层文件系统提供了一个模型接口。
5、当您需要列表或树时,通常创建一个空的 QStandardItemModel 并使用 appendRow() 向模型添加项目,并使用 item() 访问项目。 如果您的模型表示一个表,您通常将表的维度传递给 QStandardItemModel 构造函数并使用 setItem() 将项目定位到表中。 您还可以使用 setRowCount() 和 setColumnCount() 来更改模型的维度。 要插入项目,请使用 insertRow() 或 insertColumn(),要删除项目,请使用 removeRow() 或 removeColumn()。
6、您可以使用 setHorizontalHeaderLabels() 和 setVerticalHeaderLabels() 设置模型的标题标签。
7、您可以使用 findItems() 在模型中搜索项目,并通过调用 sort() 对模型进行排序。
8、调用 clear() 从模型中删除所有项目。
QStandardItemModel 创建表的示例用法:
QStandardItemModel model(4, 4);
for (int row = 0; row < 4; ++row) {
for (int column = 0; column < 4; ++column) {
QStandardItem *item = new QStandardItem(QString("row %0, column %1").arg(row).arg(column));
model.setItem(row, column, item);
}
}
QStandardItemModel 创建树的示例用法:
QStandardItemModel model;
QStandardItem *parentItem = model.invisibleRootItem();
for (int i = 0; i < 4; ++i) {
QStandardItem *item = new QStandardItem(QString("item %0").arg(i));
parentItem->appendRow(item);
parentItem = item;
}
在视图上设置模型后,您通常希望对用户操作做出反应,例如单击项目。 由于 QAbstractItemView 提供基于 QModelIndex 的信号和函数,因此您需要一种方法来获取对应于给定 QModelIndex 的 QStandardItem,反之亦然。 itemFromIndex() 和 indexFromItem() 提供此映射。 itemFromIndex() 的典型用法包括获取视图中当前索引处的项,以及获取与 QAbstractItemView 信号携带的索引对应的项,例如 QAbstractItemView::clicked()。 首先,您将视图的信号连接到类中的插槽:
QTreeView *treeView = new QTreeView(this);
treeView->setModel(myStandardItemModel);
connect(treeView, SIGNAL(clicked(QModelIndex)),
this, SLOT(clicked(QModelIndex)));
当您收到信号时,您在给定的模型索引上调用 itemFromIndex() 以获取指向该项目的指针:
void MyWidget::clicked(const QModelIndex &index)
{
QStandardItem *item = myStandardItemModel->itemFromIndex(index);
// Do stuff with the item …
}
相反,当您想要调用以索引作为参数的模型/视图函数时,您必须获得项目的 QModelIndex。 您可以通过使用模型的 indexFromItem() 函数或等效地调用 QStandardItem::index() 来获取索引:
treeView->scrollTo(item->index());
摘抄自Qt帮助文档