1 说明
QStandardItemModel是Qt库中的一个类,它是QAbstractItemModel的一个子类。它可以用来存储和管理数据,并且可以通过Qt视图类(如QListView、QTreeView等)来显示这些数据。它采用了树型结构存储数据,每一个节点对应一个QStandardItem对象。使用这个类可以简化数据的管理和显示过程。
2 函数
2.1 构造函数
QStandardItemModel(int rows, int columns, QObject *parent = nullptr)
QStandardItemModel::QStandardItemModel(int rows, int columns, QObject *parent = nullptr) 是 QStandardItemModel 类的一种构造函数,用于创建一个具有指定行数和列数的标准项模型。
rows: 指定模型的行数。
columns: 指定模型的列数。
parent: 指定父对象,可以为nullptr
当使用这个构造函数创建模型后,模型会自动创建 rows * columns 个项目,并使用默认值进行初始化
QStandardItemModel(QObject *parent = nullptr)
可以通过setRowCount和setColumnCount函数设置行和列
也可以通过setHorizontalHeaderLabels函数设置表头,间接确定列数
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
2.2 追加列\行
void appendColumn(const QList<QStandardItem *> &items)
它可以在模型的最后一列后面添加一列并将给定的一组项目插入到新列中。
items: 指定要插入到新列中的一组项目,这些项目将会按照顺序插入到新列的不同行中。
请注意,如果传递给函数的列表中的项目数量小于模型中现有的行数,则多余的行将被填充为空项目。如果传递给函数的列表中的项目数量大于模型中现有的行数,则会自动增加模型的行数,以容纳所有项目。
QList<QStandardItem *> items;
for(int i=0;i<3;i++)
{
items<<new QStandardItem(QString::number(i));
}
model->appendColumn(items);
void appendRow(const QList<QStandardItem *> &items)
追加一行,用法同上
void appendRow(QStandardItem *item)
它可以在模型的最后一行后面添加一行并将给定的项目插入到新行中。
item: 指定要插入到新行中的项目
请注意, 使用这种方法添加的行只有一个元素,需要多加元素可以用 appendRow(const QList<QStandardItem *> &items)来添加.
2.3 清除、删除并返回指定行或列
void QStandardItemModel::clear()
它用于删除模型中的所有行和列。
这个函数会删除模型中所有的项目,同时也会删除所有的水平和垂直表头项目。模型将会被重置为空。
请注意, 这个函数会使用 QAbstractItemModel::beginRemoveRows() 和 QAbstractItemModel::endRemoveRows() 通知视图模型数据的变化, 一般的使用场景是在初始化或者重置数据的时候使用,可以避免一些不必要的数据重复.
bool clearItemData(const QModelIndex &index)
它可以清空在指定索引处的项目的全部角色值。
index: 指定要清空的项目的索引。
QModelIndex index = model->index(1,1);
model->clearItemData(index);
QList<QStandardItem *> QStandardItemModel::takeColumn(int column)
函数从模型中删除给定的列,并返回包含这一列中所有项目的列表。删除列之后,这些项目将不会显示在视图中,并且不再受模型管理。这些项目可以被插入到其他模型或添加到其他位置。
如果列不存在或者指定的列的索引小于0或者大于columnCount(),函数将返回空列表。
这种方法可能会在一些特定情境下使用,像某些操作结束后需要把数据从模型中提取并进行一些特定处理。如果只是想要清除模型中的数据,建议使用clear()函数。
QList<QStandardItem *> takeRow(int row)
同上
QStandardItem * takeHorizontalHeaderItem(int column)
模型中删除指定的列的水平标题项目,并返回该项目的指针。如果没有指定的标题项目,则返回nullptr.
这个方法可以用来替换或移除水平头项目. 比如说在某些时候需要自定义标题项目进行展示而不是默认提供的那一个.
在移除后, 水平标题项目将不再显示在视图中并且不再受模型管理. 这个项目可以被插入到其他模型或添加到其他位置.
如果列不存在或者指定的列的索引小于0或者大于columnCount(),函数将返回nullptr.
QStandardItem * takeVerticalHeaderItem(int row)
同上
QStandardItem * takeItem(int row, int column = 0)
函数从模型中删除指定行和列的项目,并返回该项目的指针。如果没有在该位置的项目,则返回nullptr。
这个方法可以用来删除或替换项目. 这个项目将不再显示在视图中并且不再受模型管理. 这个项目可以被插入到其他模型或添加到其他位置.
如果行或列索引小于0或大于行数或列数,或者给定位置不包含项目,函数将返回nullptr.
2.4 查找
QList<QStandardItem *> findItems(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0) const
它可以在模型中查找包含给定文本的项目。
text: 指定要查找的文本。
flags: 指定匹配文本时使用的匹配标志。Qt::MatchExactly是默认值
column: 指定要在哪一列中查找项目,默认值为0
该函数返回包含所有找到的项目。如果未找到任何项目,则返回空列表。
Qt::MatchFlags 包括以下标志:
- Qt::MatchExactly: 匹配整个字符串。
- Qt::MatchContains: 匹配包含给定文本的所有项目。
- Qt::MatchStartsWith: 匹配以给定文本开头的所有项目。
- Qt::MatchEndsWith: 匹配以给定文本结尾的所有项目。
- Qt::MatchRegExp: 使用正则表达式匹配所有项目。
- Qt::MatchWildcard: 使用通配符匹配所有项目。
- Qt::MatchCaseSensitive: 区分大小写进行匹配。
- Qt::MatchWrap: 超出范围时回到开头。
- Qt::MatchRecursive: 递归搜索。
QList<QStandardItem *> items = model->findItems("Bobe",Qt::MatchExactly,0);
qDebug()<<items.count