【Qt之QStandardItemModel】使用,tableview、listview、treeview设置模型

1. 引入

QStandardItemModel类提供了一个通用的模型,用于存储自定义数据。
以下是其用法:该类属于gui模块,因此在.pro中,需添加QT += gui,如果已存在,则无需重复添加。
首先,引入头文件:

#include <QStandardItemModel> 

2. 描述

以下介绍很重要,可以慢下心来阅读。
QStandardItemModel类提供了一个用于存储自定义数据的通用模型。
QStandardItemModel可以用作标准Qt数据类型的存储库。它是模型/视图类之一,是Qt模型/视图框架的一部分。
QStandardItemModel提供了一种经典的基于项目的方法来处理模型。QStandardItemModel中的项由QStandardItem提供。
QStandardItemModel实现了QAbstractItemModel接口,这意味着该模型可以用于在任何支持该接口的视图中提供数据(例如QListView, QTableViewQTreeView,以及您自己的自定义视图)。为了提高性能和灵活性,您可能希望创建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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FreeLikeTheWind.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值