目录
QStandardItemModel以项为数据的基础标准数据模型类,通常与QTableView组合成Model/View结构。
QStandardItemModel:
基于项数据的标准数据模型,可以处理二维数据。维护一个二维的项数据数组,每个项是一个QStandardItem类的变量,用于存储项的数据、体格式、对齐方式等。
QTableView:
二维数据表视图组件,有多个行和多个列,每个基本显示单元是一个单元格,通过setModel()函数设置一个QStandardItemModel类的数据模型之后,一个单元格显示QStandardItemModel数据模型中的一个项。
QItemSelectionModel:
一个用于跟踪视图组件的单元格选择状态的类,当在QTableView选择某个单元格,或多个单元格时,通过 QItemSelectionModel可以获得选中的单元格的模型索引,为单元格的选择操作提供方便。
关系:
QTableView是界面视图组件,其关联的数据模型是QStandardItemModel,关联的项选择模型是QItemSelectionModel,QStandardItemModel的数据管理的基本单元是QStandardItem。
创建数据模型:
QStandardItemModel model = new QStandardItemModel();
选择模型:
QItemSelectionModel itemSelectionModel = new QItemSelectionModel(model );
在TableView中设置数据模型和选择模型:
ui->tableview->setModel(model) ; //设置数据模型
ui->tableview->setselectionModel(itemSelectionModel ); / /设置选择模型
插入行:
使用QStandardItemModel::insertRow()函数插入一行
函数原型:
void insertRow(int row, const QList<QstandardItem *> &items)
参数:
row是一个行号,表示在此行号之前插入一行,若row 等于或大于总行数,则在最后添加一行。
QList<QStandardItem *>&items是一个QStandardItem类型的列表类,需要为插入的一行的每个项数据创建一个QStandardItem类型的项,然后传递给insertRow()函数。
删除行:
//删除行 QModelIndex curIndex = itemSelectionModel ->currentIndex();//获取模型索引 if (curIndex.row() == model ->rowCount() - 1)//最后一行 { model->removeRow(curIndex.row()) ; //删除最后一行 } else { model->removeRow(curIndex.row()) ;//删除一行,并重新设置当前选择行 itemSelectionModel->setCurrentIndex(curIndex, QItemSelectionModel::Select) ; }
单元格格式设置:
//设置文字居左对齐 if(!itemSelectionModel->hasSelection()) { return; } //获取选择的单元格的模型索引列表,可以是多选 QModelIndexList selectedIndex = itemSelectionModel->selectedIndexes(); for(int i = 0; i < selectedIndex.count(); i++) { QModelIndex aIndex = selectedIndex.at(i);//获取一个模型索引 QStandardItem* aItem = model->itemFromIndex(aIndex); //获取项数据 aItem->setTextAlignment(Qt::AlignLeft);//设置文字对齐方式 } QFont font = aItem->font() ; font.setBold(checked) ; //设置字体是否粗体 checked: true false aItem->setFont (font)