QStandardItemModel的用法

来源:互联网 发布:网络侵权的管辖 编辑:程序博客网 时间:2024/05/16 11:18

             研究源码时总能看到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);     } }
使用q标准化模型创建树的示例:
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对应的q标准化,反之亦然。itemFromIndex()和indexFromItem()提供了这个映射。itemFromIndex()的典型应用包括获取项目目前的索引视图,并获取项对应于一个索引由QAbstractItemView信号,如QAbstractItemView:点击()。首先在你的类中连接视图的符号

 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); }
        相反,当您希望调用以索引为参数的模型/视图函数时,您必须获得项目的QModelIndex。您可以通过使用model的indexFromItem()函数来获得索引,也可以通过调用q标准化tem::index()来获得该索引:
 treeView->scrollTo(item->index());
       当然,您不需要使用基于项目的方法;您可以在使用模型时完全依赖QAbstractItemModel接口,或者使用二者的组合。




原创粉丝点击