研究源码时总能看到QStandardItemModel的身影,于是查看Qt帮助文档,感觉其功能还蛮强大的,于是将英文翻译过来以便后用。
QStandardItemModel q标准化模型类提供了一个用于存储定制数据的通用模型。 q标准化模型可以作为标准Qt数据类型的存储库。它是模型/视图类之一,也是Qt模型/视图框架的一部分。 q标准化模型提供了一种经典的基于项目的方法来处理模型。q标准化模型提供了q标准化模型中的项目。 q标准化模型实现了QAbstractItemModel接口,这意味着该模型可以用于提供支持该接口的任何视图中的数据(如QListView、QTableView和QTreeView,以及自定义的类型)。
当您需要一个列表或树时,通常会创建一个空的q标准化模型,并使用appendRow()将项目添加到模型中,并使用item()来访问项目。如果您的模型代表一个表,那么您通常将表的维度传递给q标准化模型构造函数,并使用setItem()将条目放置到表中。您还可以使用setRowCount()和setColumnCount()来改变模型的维度。要插入项,请使用insertRow()或insertColumn(),并删除项目,使用removeRow()或removeColumn()。
使用q标准化模型创建表的示例:
- 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 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;
- }
- 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);
- }
- treeView->scrollTo(item->index());