1. 引入
QStandardItemModel类提供了一个通用的模型,用于存储自定义数据。
以下是其用法:该类属于gui模块,因此在.pro中,需添加QT += gui,如果已存在,则无需重复添加。
首先,引入头文件:
#include <QStandardItemModel>
2. 描述
以下介绍很重要,可以慢下心来阅读。
QStandardItemModel类提供了一个用于存储自定义数据的通用模型。
QStandardItemModel可以用作标准Qt数据类型的存储库。它是模型/视图类之一,是Qt模型/视图框架的一部分。
QStandardItemModel提供了一种经典的基于项目的方法来处理模型。QStandardItemModel中的项由QStandardItem提供。
QStandardItemModel实现了QAbstractItemModel接口,这意味着该模型可以用于在任何支持该接口的视图中提供数据(例如QListView, QTableView和QTreeView,以及您自己的自定义视图)。为了提高性能和灵活性,您可能希望创建QAbstractItemModel的子类,以便为不同类型的数据存储库提供支持。例如,QDirModel为底层文件系统提供了一个模型接口。
当您需要一个列表或树时,您通常会创建一个空的QStandardItemModel,并使用appendRow()向模型中添加项目,并使用item()访问项目。如果您的模型表示一个表,您通常将表的尺寸传递给QStandardItemModel构造函数,并使用setItem()将项目定位到表中。您还可以使用setRowCount()和setColumnCount()来更改模型的尺寸。要插入项,使用insertRow()或insertColumn(),要删除项,使用removeRow()或removeColumn()。
您可以使用setHorizontalHeaderLabels()和setVerticalHeaderLabels()设置模型的标题标签。
您可以使用findItems()在模型中搜索项目,并通过调用sort()对模型进行排序。
调用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)


6361

被折叠的 条评论
为什么被折叠?



