我是靠谱客的博主 俭朴刺猬,最近开发中收集的这篇文章主要介绍Qt模型视图框架:QItemSelectionModel、QItemSelectionRange、QItemSelectionQItemSelectionRange,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

QItemSelectionModel

一、描述

QItemSelectionModel 跟踪视图中的选定项。

QItemSelectionModel 采用两层方法进行选择管理,既处理已提交的选定项目,又处理作为当前选择一部分的项目。

二、类型成员

1、enum QItemSelectionModel::SelectionFlag:此枚举描述了选择模型的更新方式。

  • NoUpdate:不会进行选择。
  • Clear:完整的选择将被清除。
  • Select:将选择所有指定的索引。
  • Deselect:所有指定的索引将被取消选择。
  • Toggle:所有指定的索引将根据其当前状态被选择或取消选择。
  • Current:当前选择将被更新。
  • Rows:所有索引都将扩展为跨行。
  • Columns:所有索引将扩展到跨列。
  • SelectCurrentSelect | Current 组合。
  • ToggleCurrentToggle | Current 组合。
  • ClearAndSelectClear | Select 组合。

三、成员函数

1、void clear()

清除选择模型。 发出 selectionChanged() 和 currentChanged()两个信号。

2、void clearCurrentIndex()

清除当前索引。发出 currentChanged()信号。

3、void clearSelection() 

清除选择模型中的选择。发出 selectionChanged()信号。

4、[信号] void currentChanged(const QModelIndex &current, const QModelIndex &previous)

每当当前项目发生变化时都会发出此信号。选择的当前项从previous被替换成current。

注意,重置项目模型时不会发出此信号。

5、[信号] void currentColumnChanged(const QModelIndex &current, const QModelIndex &previous)

如果当前项目发生变化并且其列与前一个当前项目的列不同,则发出此信号。

请注意,重置项目模型时不会发出此信号。

6、[信号] void currentRowChanged(const QModelIndex &current, const QModelIndex &previous)

如果当前项发生更改并且其行与前一个当前项的行不同,则发出此信号。

请注意,重置项目模型时不会发出此信号。

7、[信号] void modelChanged(QAbstractItemModel *model)

当使用 setModel() 成功设置模型时,会发出此信号。

8、void reset()

清除选择模型。不发出任何信号。

9、void select(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command)

      void select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)

使用指定的SelectionFlags 选择项目,并发出 selectionChanged()信号。

10、[信号] void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)

只要选择发生变化,就会发出该信号。

11、void setCurrentIndex(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)

将模型项索引设置为当前项,并发出 currentChanged()信号。 

12、[invokable] bool columnIntersectsSelection(int column, const QModelIndex &parent = QModelIndex())

如果在具有给定父项的列中选择了任何项目,则返回 true。

13、QModelIndex currentIndex() 

返回当前项的模型项索引。

14、bool hasSelection()

选择模型是否包含任何选择范围。

15、[invokable] bool isColumnSelected(int column, const QModelIndex &parent = QModelIndex()) 

如果在具有给定父项的列中选择了所有项目,则返回 true。

此函数通常比对同一列中的所有项目调用 isSelected() 更快,并且忽略不可选择的项目。

16、[invokable] bool isRowSelected(int row, const QModelIndex &parent = QModelIndex()) 

如果在具有给定父项的行中选择了所有项目,则返回 true。

此函数通常比对同一行中的所有项目调用 isSelected() 更快,并且忽略不可选择的项目。

17、[invokable] bool isSelected(const QModelIndex &index) 

如果选择了给定的模型项索引,则返回 true。

18、[invokable] bool rowIntersectsSelection(int row, const QModelIndex &parent = QModelIndex()) 

如果在具有给定父项的行中选择了任何项目,则返回 true。

19、[invokable] QModelIndexList selectedColumns(int row = 0) 

返回给定行中所有行都被选中的列的索引。

20、QModelIndexList selectedIndexes() 

返回所有选定模型项索引的列表。该列表不包含重复项,并且未排序。

21、[invokable] QModelIndexList selectedRows(int column = 0) 

返回给定列中所有列都被选中的行的索引。

22、const QItemSelection selection() 

返回存储在选择模型中的选择范围。


QItemSelectionRange

一、描述

QItemSelectionRange 包含有关模型中选定项目范围的信息。

项目范围是模型项目的连续数组,可以可视化为表格中的二维单元格块。选择范围有top()、left()、bottom()、right() 、parent()。

二、成员函数

1、QItemSelectionRange(const QModelIndex &index)

构造一个仅包含模型索引索引指定的模型项的新选择范围。

2、QItemSelectionRange(const QModelIndex &topLeft, const QModelIndex &bottomRight)

构造一个新的选择范围,仅包含 topLeft 指定的索引和 bottomRight 索引。

3、int bottom()、left()、right()、top()

返回与选择范围中最下面、最左边、最右边、最上面的选定行列对应的行索引。

4、const QPersistentModelIndex & bottomRight()、topLeft()

返回位于选择范围右下角、左上角的项目的索引。

5、bool contains(const QModelIndex &index) 

index指定的模型项是否位于选定项的范围内。

6、int height()、width()

返回选择范围内选定的行数、列数。 

7、QModelIndexList indexes() 

返回存储在选择中的模型索引项列表。

8、QItemSelectionRange intersected(const QItemSelectionRange &other) 

返回一个新的选择范围,只包含在选择范围和另一个选择范围相交的项目。

9、bool intersects(const QItemSelectionRange &other) 

两个范围是否相交。

10、QModelIndex parent() 

返回选择范围内项目的父模型项目索引。


QItemSelection

一、描述

QItemSelection 表示一个选择范围列表,它提供用于创建和操作选择以及从模型中选择一系列项目的功能。

可以构建和初始化项目选择以包含来自现有模型的一系列项目。下面的示例构造一个选择,其中包含来自给定模型的一系列项目,从左上角开始,到右下角结束。

QItemSelection *selection = new QItemSelection(topLeft, bottomRight);

QItemSelection 通过使用选择范围而不是记录选择中每个项目的模型项目索引来节省内存并避免不必要的工作。

二、成员函数

1、QItemSelection(const QModelIndex &topLeft, const QModelIndex &bottomRight)

构造一个从左上角模型项(由 topLeft 索引指定)延伸到右下角(由 bottomRight 指定)的项选择。

2、bool contains(const QModelIndex &index) 

选择是否包含给定的索引。

3、QModelIndexList indexes()

返回与所选项目对应的模型索引列表。

4、void merge(const QItemSelection &other, QItemSelectionModel::SelectionFlags command)

使用给定的命令将其他选择与此 QItemSelection 合并。保证没有范围重叠。

仅支持 Select、Deselect、Toggle

5、void select(const QModelIndex &topLeft, const QModelIndex &bottomRight)

将从左上角模型项(由 topLeft 索引指定)延伸到右下角(由 bottomRight 指定)范围内的项添加到列表中。

注意:topLeft 和 bottomRight 必须具有相同的父级。

6、void split(const QItemSelectionRange &range, const QItemSelectionRange &other, QItemSelection *result)

从range中删除 other 中的所有项目并将结果放入result中。

最后

以上就是俭朴刺猬为你收集整理的Qt模型视图框架:QItemSelectionModel、QItemSelectionRange、QItemSelectionQItemSelectionRange的全部内容,希望文章能够帮你解决Qt模型视图框架:QItemSelectionModel、QItemSelectionRange、QItemSelectionQItemSelectionRange所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部