自然需要继承
MyItemModel::public QStandardItemModel
一、 设置列数行数
QStandardItemModel::setColumnCount(int columns);
QStandardItemModel::setRowCount(int rows);
二、设置第一行表头的显示
QStandardItemModel::setHorizontalHeaderLabels(QStringList headList);
其中调整列宽的一个方式是,可以利用空格做占位符,注意对应的view需要添加下面一行代码
例如
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
QStringList headList;
headList<<"Address"<<" 0 "<<" 1 "<<" 2 "<<" 3 ";
三、清除表格内容
QStandardItemModel::clear();
四、显示方面
virtual QVariant QStandardItemModel::data(const QModelIndex &index, int role) const override;
其中QModelIndex index
通过index可以获得是表格中的哪个格子需要信息
index.column()获得列号 从0开始
index.row()获得行号 从0开始
其中int role
role是调用data()函数获取那个属性的标志
注意若不需要特殊处理则返回默认值
return QStandardItemModel::data(index,role);
一般常用的属性如下
role==Qt::DisplayRole
表示显示属性,即正常显示时表格中的字符串 一般来说可以return QString类型,当然数字型的也是可以的
role==Qt::EditRole
表示当双击时,进入编辑编辑状态时,默认的显示字符串,一般根据返回的QVaint类型,编辑的widget会有不同,例如如果是整型会是spainBox,如果是字符串则不会有什么特别
role==Qt::TextAlignmentRole
表示字符串的对齐方式
return Qt::AlignCenter;
则是居中对齐
role==Qt::ToolTipRole
表示悬停在当前表格上时的提示信息
其他属性还有颜色等信息
五、其他属性
有些属性不会在data()函数中重载
而是需要在flags()函数中重载
virtual Qt::ItemFlags QStandardItemModel::flags(const QModelIndex &index) const;
//设置表格中的一个格子不能被选中不能编辑
return QStandardItemModel::flags(index)&(~Qt::ItemIsSelectable)&(~Qt::ItemIsEditable);
六、显示数据的两种形式
一般来说,设置完行列数后,显示数据通过重载data();
但是某些情况,某些数据使用data()不方便,例如情形A:通过行列号不太方便访问数据,但数据可以方便的计算出行列号。情形B:通过行列号可以方便的访问数据。那么AB情形同时存在,此时就可以即重载data(),也通过下面方式显示情形A的数据。
QStandardItem* item = new QStandardItem();
item->setData("test");
setItem(2,1,item);//行2列1显示“test”
注意:item(row,column);必须setItem()后,才可以使用,即使在表格中可以显示,并不意味着使用item()可以访问到。
takeItem(row,column) 在不删除item的情况下,将item移出表格
要删除item,比较好的方式是将item指针保存起来,需要删除时delete item即可