Qt的model的一些东西

1. 概念性的东西

在model结构中,数据模型为视图组件和代理提供存取数据的标准接口,在Qt中在所有的数据模型类都从QAbstractItemModel继承而来,不管底层的数据结构是如何组织数据的,QAbstractItemModel的子类都以表格的层次结构表示数据,视图组件通过这种规则来存取模型中的数据,但是表现给用户的形式不一样。
常用的表现形式3种为list Model ,Table model , Tree Model, 不管数据模型的表现形式怎么样,数据模型中储存数据的基本单元都是项(item),每一个项有一个行号,一个列号,还有一个父项(parent item)。

2.模型索引–QModelIndex

数据模型的基本形式是用行和列定义的表格数据,要获得一个模型索引必须提供3个参数:行号 列号和父项的模型索引。例如:
ABC都是顶级节点时
QModleindex indexA = model->index(0,0,QModelIndex());
QModleindex indexB= model->index(1,1,QModelIndex());
QModleindex indexC = model->index(2,1,QModelIndex());
又例如:
节点B的父节点是节点A,节点B的模型索引如下
QModleindex indexB = model->index(1,0,indexA);

3. QFileSestemModel用法

QFileSestemModel是一个可用于访问本机文件系统的数据模型。QFileSestemModel和视图组件Qtree View结合使用,可以用目录树的方式显示本机上的文件系统,使用QFileSestemModel提供的接口函数,可以创建目录 删除目录 重命名目录,也可以获得文件名,目录名称,文件大小等参数,还可以获得文件的详细信息。
Qt的model的一些东西_第1张图片

	QFileSestemModel   model=new QFileSestemModel;
	model ->setRootPath(QDir::currentPath());
	ui->treeView->setModle(model)
	ui->listView->setModle(model)
	ui->tableView->setModle(model)
	connect(ui->treeView,SIGNAL(clicked(QModelIndex)),ui->listView,SLOT(setRootIndex(QModelIndex)));
	//treeView点击时,其目录设置为listView和tableView的根节点
 	connect(ui->treeView,SIGNAL(clicked(QModelIndex)),ui->tableView,SLOT(setRootIndex(QModelIndex)));

4. QStringListModel用法

QStringListModel用于处理字符串列表的数据模型,他可以作为QlistView的数据模型,在界面上显示和编辑字符串列表。
QStringListModel的setStringList()函数可以初始化数据模型的字符串列表的内容,string List()函数返回数据模型内的字符串列表,在关联的List View组件里编辑修改数据后,数据都会及时更新到数据模型内的字符串列表里。
QStringListModel是一个可编辑的模型,可用于在视图小部件(如QListView或QComboBox)中显示多个字符串的简单情况。该模型提供可编辑模型的所有标准函数,将字符串列表中的数据表示为具有一列和多行等于列表中项数的模型。
*如下列用法所示:
QStringListModel model = new QStringListModel();
QStringList list;
list << “a” << “b” << “c”;
model->setStringList(list);

5. QStandardItemModel(摘自Qt帮助文档)

QStandardItemModel类提供了用于存储自定义数据的通用模型。QStandardItemModel可以用作标准qt数据类型的存储库。它是Model/View类之一,是qt的Model/View框架的一部分。
当想要一个列表或树时,通常创建一个空的QStandardItemModel,并使用appendRow() 将项添加到模型中,并使用Item()访问一个项。如果模型表示一个表,则通常将表的维度传递给QStandardItemModel构造函数,并使用setItem()将项定位到表中。您还可以使用setrowcount()和setColumncount()来更改模型的尺寸。若要插入项,使用insertRow() or insertColumn(),若要删除项,使用Removerow()或Removeolumn()。

 //使用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创建树的示例:
    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, &QTreeView::clicked,
this, &MyWidget::clicked);
当接收到信号时,您可以在给定的模型索引上调用itemfromIndex(),以获取指向该项目的指针:
void MyWidget::clicked(const QModelIndex &index)
{
QStandardItem *item = myStandardItemModel->itemFromIndex(index);
// Do stuff with the item …
}

以上参考

你可能感兴趣的:(Qt)