QStandardItemModel作为表格模型时使用注意事项

自然需要继承

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即可

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值