一条龙网站建设价格,朝阳区互联网公司,深圳网站建设深icp备,河南省汝州市文明建设网站背景#xff1a;
model存储数据#xff0c;用于同步view显示。数据节点全部是item。对象树结构。但是一些常用的函数的特征和用法#xff0c;手册中没有提及太多#xff0c;于是记录备忘。
主要包括#xff1a;
setRowCount#xff0c;setColumnCount
setItem#x…背景
model存储数据用于同步view显示。数据节点全部是item。对象树结构。但是一些常用的函数的特征和用法手册中没有提及太多于是记录备忘。
主要包括
setRowCountsetColumnCount
setItemsetVerticalHeaderItemsetHorizontalHeaderItem
setDatasetHeaderData
当然还有很多函数不用逐一列举本次记录的是我认为容易有歧义的分为item类和data类。
model的容量
model可以通过构造函数或setRowCount/setColumnCount函数设置行数和列数但仅仅是设置了“容量”并没有item数据实体。
model的数据实体
model的setItemsetVerticalHeaderItemsetHorizontalHeaderItem函数如果需要会自动“撑开”容量一旦设置就相当于有了数据实体哪怕是空值。
item是个对象里面可以有多个“字段/角色”来存储数据。其中text可以直接设置和读取其它类型数据可以用ItemRole区分随便使用很灵活。
data函数
model的setDatasetHeaderData函数“容量”允许时可以创建并给item赋值但不能自动“撑开”容量所以依赖“容量”。如果“容量”不允许执行失败返回false。
相比item我想为什么setItem是void没有返回值因为必然成功。而setdata需要bool返回值因为不一定成功。
实践
所以写了下面代码用于测试
#include mainwindow.h
#include QApplication
#include QStandardItemModelint main(int argc, char *argv[])
{//1:QStandardItemModel *model1 new QStandardItemModel;model1-setHorizontalHeaderItem(0, new QStandardItem(text1));//setItem会自动创建“行/列”此时item.text()item1int model1_iColCount model1-columnCount();// 1bool model1_bIsSetSuccessed model1-setHeaderData(0, Qt::Horizontal, QVariant(10));// trueQString model1_sHeaderData model1-headerData(0, Qt::Horizontal).toString();// 10QString model1_sItemText model1-horizontalHeaderItem(0)-text();// 10setData自动创建了item并赋了值覆盖了“text1”//2:QStandardItemModel *model2 new QStandardItemModel;//默认没有“行/列”bool model2_bIsSetSuccessed model2-setHeaderData(0, Qt::Horizontal, QVariant(20));// falseQString model2_sHeaderData model2-headerData(0, Qt::Horizontal).toString();// int model2_iColCount model2-columnCount();// 0//3:QStandardItemModel *model3 new QStandardItemModel;model3-setColumnCount(1);//显式设置列数int model3_iColCount model3-columnCount();// 1bool model3_bIsSetSuccessed model3-setHeaderData(0, Qt::Horizontal, QVariant(30));// trueQString model3_sHeaderData model3-headerData(0, Qt::Horizontal).toString();// 30QString model3_sItemText model3-horizontalHeaderItem(0)-text();// 30setData自动创建了item并赋了值//4:QStandardItemModel *model4 new QStandardItemModel(0, 1);//构造时设置“行/列”数int model4_iColCount model4-columnCount();// 1bool model4_bIsSetSuccessed model4-setHeaderData(0, Qt::Horizontal, QVariant(40));// trueQString model4_sHeaderData model4-headerData(0, Qt::Horizontal).toString();// 40QString model4_sItemText model4-horizontalHeaderItem(0)-text();// 40setData自动创建了item并赋了值return 0;
}显然setItem是自动的随心所欲setData是依赖model行和列的数量的如果setData成功会创建和更新相应的item返回true。否则返回false一切无效但不报错。这也是特别要注意的。如果不小心使用了它没有判断返回值一旦出错一时很难定位。
我的体会
最好直接操作model和item并充分理解对象树所谓data类的操作反正我觉得无所谓目前还没发现哪种场景必须用它。
本文完。