QT视图模型中的QStandItemModel

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帮助文档

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值