概述
QStandardItemModel 是标准的以QStandardItem为基础的标准数据模型类,通常与 QTableView 组合成 Model/View 结构,实现通用的二维数据的管理功能。
这几个类之间的关系是:QTableView 是界面视图组件,其关联的数据模型是 QStandardItem Model,关联的项选择模型是 QItemSelectionModel,QStandardItemModel 的数据管理的基本单元是 QStandardItem。
本节介绍 QStandardltemModel 的使用,主要用到以下 3 个类:
1、QTableView:
二维数据表视图组件,有多个行和多个列,每个基本显示单元是一个单元格,通过 setModel() 函数设置一个 QStandardItemModel 类的数据模型之后,一个单元格显示 QStandardItemModel 数据模型中的一个项。
除了常用的设置、查询行高、列宽、行表头、列表头之外,还有下列方法也常用到。
void | setCornerButtonEnabled(bool enable) | 设置表格左上角是否设置勾选框,用于全选所有的单元格 |
void | setSortingEnabled(bool enable) | 设置是否支持排序 |
void | setSpan(int row, int column, int rowSpanCount, int columnSpanCount) | 设置单元格合并 |
virtual void | setModel(QAbstractItemModel *model) override | 设置数据模型 |
virtual void | setSelectionModel(QItemSelectionModel *selectionModel) override | 设置选择模型 |
void | selectRow(int row) | 选择行 |
void | showColumn(int column) | 选择列 |
void | setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior) | 设置选择时的行为 |
void | setSelectionMode(QAbstractItemView::SelectionMode mode) | 设置选择模式 |
2、QStandardItemModel
继承自QAbstractItemModel,基于项数据的标准数据模型,可以处理二维数据。维护一个二维的项数据数组,每个项是一个 QStandardltem 类的变量,用于存储项的数据、字体格式、对齐方式等。
除了常用的插入行、列、单元格外,常用方法如下。
void | clear() | 清除模型中数据项 |
bool | clearItemData(const QModelIndex &index) | 清除QModelIndex中的数据项 |
QList<QStandardItem *> | findItems(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0) const | 根据指定的column,指定的text,用指定的flags来查询出匹配的项(QStandardItem)。指定的flags默认为相等,可以进行正则匹配。 |
QStandardItem * | horizontalHeaderItem(int column) const | 指定列的行表头项 |
QModelIndex | indexFromItem(const QStandardItem *item) const | 查询指定QStandardItem的QModelIndex |
QStandardItem * | itemFromIndex(const QModelIndex &index) const | 查询指定QModelIndex的QStandardItem |
void | setColumnCount(int columns) | 设置列数量,超出设置的列会丢弃。 |
void | setHorizontalHeaderItem(int column, QStandardItem *item) | 设置指定列的行表头 |
void | setHorizontalHeaderLabels(const QStringList &labels) | 设置水平表头 |
void | setRowCount(int rows) | 设置行数量,超出设置的行会丢弃。 |
void | setVerticalHeaderItem(int row, QStandardItem *item) | 设置指定行的列表头 |
void | setVerticalHeaderLabels(const QStringList &labels) | 设置列表头 |
QStandardItem * | verticalHeaderItem(int row) const | 查询指定row的列表头 |
QStandardltem 常用属性如下:
void | appendColumn(const QList<QStandardItem *> &items) | 纵向添加QStandardItem |
void | appendRow(const QList<QStandardItem *> &items) | 横向添加QStandardItem |
int | column() const | 单元格所在列 |
QModelIndex | index() const | 单元格索引 |
QStandardItemModel * | model() const | 单元格所属QStandardItemModel |
int | row() const | 单元格所在行 |
void | setAutoTristate(bool tristate) | 设置是否自动三态选择,全选、不选、部分选择 |
void | setBackground(const QBrush &brush) | 设置背景 |
void | setCheckState(Qt::CheckState state) | 设置选择状态 |
void | setCheckable(bool checkable) | 设置是否可勾选 |
void | setDragEnabled(bool dragEnabled) | 设置是否可拖拽 |
void | setDropEnabled(bool dropEnabled) | 设置是否可接收拖入 |
void | setEditable(bool editable) | 设置是否可编辑 |
void | setEnabled(bool enabled) | 设置是否有效,只有有效情况下才能进行其他交互,比如选择、编辑等 |
void | setFont(const QFont &font) | 设置字体 |
void | setForeground(const QBrush &brush) | 设置前景 |
void | setIcon(const QIcon &icon) | 设置ICON |
void | setSelectable(bool selectable) | 设置是否可选择 |
void | setText(const QString &text) | 设置单元格文本 |
void | setTextAlignment(Qt::Alignment alignment) | 设置单元格文本对齐方式 |
void | setUserTristate(bool tristate) | 设置是否支持三态选择,全选、不选、部分选择 |
void | setFlags(Qt::ItemFlags flags) | 设置单元格标志,可选标志如下: |
QModelIndex用于定义QStandardItemModel中QStandardltem的索引
int | column() const | 模型索引所在的列 |
QVariant | data(int role = Qt::DisplayRole) const | 索引的指定role值,默认为DisplayRole |
Qt::ItemFlags | flags() const | 索引指向单元格的标志 |
bool | isValid() const | 索引是否有效 |
const QAbstractItemModel * | model() const | 该索引所属的QAbstractItemModel模型 |
int | row() const | 模型索引所在的行 |
QModelIndex | sibling(int row, int column) const | 指定行列的兄弟索引 |
QModelIndex | siblingAtColumn(int column) const | 当前行的列兄弟索引 |
QModelIndex | siblingAtRow(int row) const | 当前列的行兄弟索引 |
3、QItemSelectionModel
一个用于跟踪视图组件的单元格选择状态的类,当在 QTableView 选择某个单元格,或多个单元格时,通过 QItemSelectionModel 可以获得选中的单元格的模型索引,为单元格的选择操作提供方便。
QModelIndex | currentIndex() const | 当前单元格的QModelIndex索引,当前单元格是键盘可以操作和获取鼠标焦点的单元格 |
bool | hasSelection() const | 是否有单元被选择 |
bool | isColumnSelected(int column, const QModelIndex &parent) const | 指定列是否全部被选择 |
bool | isRowSelected(int row, const QModelIndex &parent) const | 指定行是否全部被选择 |
bool | isSelected(const QModelIndex &index) const | QModelIndex指定的单元格是否被选中 |
const QAbstractItemModel * | model() const | 选择列表模型跟踪的QAbstractItemModel |
QAbstractItemModel * | model() | 选择列表模型跟踪的QAbstractItemModel |
QModelIndexList | selectedColumns(int row = 0) const | 指定行选择的列列表,默认第0行 |
QModelIndexList | selectedIndexes() const | 选择的索引列表 |
QModelIndexList | selectedRows(int column = 0) const | 指定列选择的行列表,默认第0列 |
const QItemSelection | selection() const | 选择列表模型存储的选择范围QItemSelection |
void | setModel(QAbstractItemModel *model) | 设置选择列表模型跟踪的QAbstractItemModel |
virtual void | select(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command) | 根据command选择指定的QItemSelection,command如下: |
virtual void | select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command) | 根据command选择指定的QModelIndex,command如下: |
QItemSelection类管理选择单元格的范围信息
bool | contains(const QModelIndex &index) const | 判断选择范围是否包含QModelIndex指定的单元格 |
QModelIndexList | indexes() const | 选择范围的QModelIndex单元格列表 |
void | merge(const QItemSelection &other, QItemSelectionModel::SelectionFlags command) | 合并指定QItemSelection的选择范围方式,只支持ItemSelectionModel::Select, QItemSelectionModel::Deselect,QItemSelectionModel::Toggle |
void | select(const QModelIndex &topLeft, const QModelIndex &bottomRight) | 选择从topLeft到bottomRight指定的单元格 |
最后
以上就是兴奋鞋垫为你收集整理的TableView、QStandardItemModel、QItemSelectionModel使用总结的全部内容,希望文章能够帮你解决TableView、QStandardItemModel、QItemSelectionModel使用总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复