1、概述
QStandardItemModel是Qt框架中提供的一个基于项的模型类,用于存储和管理数据,这些数据可以以表格的形式展示在视图控件(如QTableView、QTreeView等)中。QStandardItemModel支持丰富的数据操作,包括添加、删除、移动和查找项,以及设置项的显示和编辑属性。它广泛用于需要动态数据管理的应用程序中,如文件浏览器、邮件客户端的地址簿等。
QStandardItemModel中的每一项都是一个QStandardItem对象,这些对象可以包含文本、图标、工具提示等丰富的信息。通过组织这些项,QStandardItemModel可以构建出复杂的数据结构,如树形结构或表格结构。
2、重要方法
QStandardItemModel类提供了多种方法来操作和管理数据项,以下是一些重要的方法:
- rowCount(const QModelIndex &parent = QModelIndex()) const:返回指定父项下的行数。
- columnCount(const QModelIndex &parent = QModelIndex()) const:返回指定父项下的列数。
- setItem(int row, int column, QStandardItem *item):在指定位置设置项。
- item(int row, int column) const:返回指定位置的项。
- takeItem(int row, int column):移除并返回指定位置的项。
- appendRow(const QList<QStandardItem *> &items = QList<QStandardItem *>()):在模型末尾添加一行。
- insertRow(int row, const QList<QStandardItem *> &items = QList<QStandardItem *>()):在指定位置插入一行。
- removeRow(int row):移除指定行。
- setHorizontalHeaderLabels(const QStringList &labels):设置水平表头的标签。
- setVerticalHeaderLabels(const QStringList &labels):设置垂直表头的标签。
- indexFromItem(const QStandardItem *item) const:返回给定项的索引。
- itemFromIndex(const QModelIndex &index) const:返回给定索引的项。
3、重要信号
QStandardItemModel类也提供了多个信号,以便在模型数据发生变化时进行通知。以下是一些重要的信号:
- itemChanged(QStandardItem *item):当项的数据发生变化时发射此信号。
- rowsInserted(const QModelIndex &parent, int start, int end):当在指定父项下插入行时发射此信号。
- rowsRemoved(const QModelIndex &parent, int start, int end):当从指定父项下移除行时发射此信号。
- layoutChanged():当模型的布局发生变化时发射此信号,例如添加、删除或移动项。
- modelReset():当模型被重置时发射此信号,即模型中的所有数据都被清除。
4、重要角色和标志
以下是QStandardltemModel类中一些常见的角色和标志及其简要介绍:
角色(Role)
- Qt::DisplayRole:用于显示的数据。
- Qt::EditRole:用于编辑的数据。
- Qt::ToolTipRole:用于显示工具提示的数据。
- Qt::DecorationRole:用于显示装饰图标的数据。
- Qt::CheckstateRole:用于显示复选框状态的数据。
标志(Flags)
- Qt::ItemIsSelectable:项是可选中的。
- Qt::ItemIsEditable:项是可编辑的。
- Qt::ItemIsEnabled:项是启用的。
- 0Qtt::ItemIsUsercheckable:项是用户可复选的。
#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QStandardItem> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建QTableView对象 QTableView tableView; // 创建QStandardItemModel对象 QStandardItemModel model(4, 3); // 4行3列 model.setHorizontalHeaderLabels(QStringList() << "Column 1" << "Column 2" << "Column 3"); // 填充数据 for (int row = 0; row < 4; ++row) { for (int column = 0; column < 3; ++column) { QStandardItem *item = new QStandardItem(QString("Item %1,%2").arg(row).arg(column)); model.setItem(row, column, item); } } // 将模型设置给QTableView tableView.setModel(&model); // 显示QTableView tableView.show(); return app.exec();
}
觉得有帮助的话,打赏一下呗。。