PyQt控件-QAbstractItemView-项目视图的抽象基类

QAbstractItemView

提供项目视图(item view)的基本方法

QAbstractItemView是所有的使用QAbstractItemModel模型的视图的基类,是一个不能被实例化的抽象类。它通过信号槽机制为与模型的交互操作提供了一个标准化的接口,确保子类视图能够随着模型的变化而及时更新。该类对键盘和鼠标的导航、视窗的滚动、项的编辑以及选择提供了标准的支持。

继承自QAbstractScrollArea

查看更多

本文截取自我的PyQt代码学习仓库,这是一个旨在通过代码学习PyQt 5控件的仓库,有200余个.py文件近万行代码详细的注释丰富的中文文档PyQt学习资源分享,并且还在快速更新完善中,对PyQt控件学习感兴趣的小伙伴记得点个star呀。

对应的Python代码小例子也即将更新到该仓库中,敬请期待。

Qt 官方文档

Qt 5.15-官方文档-QAbstractItemView

model/View 模型视图

在Qt中使用model/View结构来管理数据与视图的关系,model负责数据的存取,数据的交互通过delegate来实现

有关Model/View编程的更多内容可以参考我的博客《PyQt中的 Model/View 结构》

Model/View架构模型

  • Model 模型与数据源通信,为体系结构中的其他组件提供数据接口
  • View 视图从模型Model中根据一定条件(如行号、列号等)获取模型索引,模型索引是一个指向数据项的引用。通过模型Model的模型索引,视图View可以从数据源检索数据项。
  • Delegate 代理在标准视图中展现数据项,编辑项时,代理Delegate直接使用模型索引与模型Model通信。

属性设置方法

滚动控制类属性

方法描述说明
setAutoScroll(bool enable)设置是否开启自动滚动:如果用户在视口边缘的 16 像素内拖动,QAbstractItemView 会自动滚动视图的内容、果当前项发生变化,则视图将自动滚动以确保当前项完全可见默认为True
setAutoScrollMargin(int margin)设置自动滚动触发的范围,单位是像素默认值为16
setVerticalScrollMode(QAbstractItemView.ScrollMode mode)垂直滚动模式见下方ScrollMode表格
setHorizontalScrollMode(QAbstractItemView.ScrollMode mode)水平滚动模式见下方ScrollMode表格
ScrollMode 滚动模式
QAbstractItemView.ScrollMode描述
ScrollPerItem一次滚动一个项目的内容
ScrollPerPixel一次滚动一个像素的内容

拖拽类属性

方法描述说明
setDragEnabled(bool enable)此属性保存视图是否支持拖放它自己的项目
setDragDropMode(QAbstractItemView.DragDropMode behavior)设置拖放模式见下方DragDropMode表格
setDefaultDropAction(Qt.DropAction dropAction)设置默认拖拽动作如果未设置该属性,则当所支持的动作支持CopyAction时,删除动作为CopyAction
setDragDropOverwriteMode(bool overwrite)控制拖拽是否覆盖写如果其值为true,则所选数据将在删除时覆盖现有项数据,而移动数据将清除该项。如果其值为false,则在删除数据时,所选数据将作为新项插入。当数据被移动时,项也会被移除。
setShowDropIndicator(bool enable)用于控制在拖拽过程中显示当前拖拽到的位置,当释放时则在当前拖拽位置覆盖或插入
DragDropMode 拖拽模式
QAbstractItemView.DragDropMode描述
NoDragDrop0不支持拖拽放置
DragOnly1该视图支持拖拽自己的项目
DropOnly2接受丢弃
DragDrop3支持拖放
InternalMove4该视图只接受来自其自身的移动(不是复制)操作

选择类属性

方法说明备注
setSelectionMode(QAbstractItemView.SelectionMode mode)选择模式见下方SelectionMode表格
setSelectionBehavior(QAbstractItemView.SelectionBehavior behavior)选择行为见下方SelectionBehavior表格
SelectionMode 选择模式
QAbstractItemView.SelectionMode描述
NoSelection0项目不能被选中
SingleSelection1当用户选择一个项目时,任何已经选中的项目将取消选中;用户可以通过按住 Ctrl 键同时选择项目以取消选择
MultiSelection2当用户以通常的方式选择一个项目时,该项目的选择状态被切换且其他项目保持不变;可以通过在多个项目上拖动鼠标来多选
ExtendedSelection3当用户以通常的方式选择一个项目时,选择将被清除并选择新项目。但是,如果用户在单击一个项目时按下Ctrl键,则被单击的项目将被切换,而所有其他项目将保持不变。如果用户在单击项目时按下Shift键,当前项目和已单击项目之间的所有项目将被选中或取消选中,这取决于已单击项目的状态。可以通过在多个项目上拖动鼠标选择。
ContiguousSelection4当用户以通常的方式选择一个项目时,选择将被清除并选择新项目。但是,如果用户在单击项目时按下Shift键,当前项目和已单击项目之间的所有项目将被选中或取消选中,这取决于已单击项目的状态。
SelectionBehavior 选择行为
QAbstractItemView.SelectionBehavior描述
SelectItems0选中单个项目
SelectRows1选中行
SelectColumns2选中列

编辑及数据呈现控制属性

方法说明备注
setEditTriggers(QAbstractItemView.EditTriggers triggers)设置编辑触发器(控制何种情况下可以开始编辑项目)使用 OR 操作符组合多个触发条件;见下方EditTriggers表格
setTabKeyNavigation(bool enable)是否支持tab键和(shift+tab)的导航
setTextElideMode(Qt.TextElideMode mode)省略号在文本中出现的位置默认值为右侧
setIconSize(QSize &size)设置图标尺寸
EditTriggers 编辑触发器
QAbstractItemView.EditTriggers描述
NoEditTriggers0没有编辑可能
CurrentChanged1当当前项目改变时开始编辑
DoubleClicked2当一个项目被鼠标双击时开始编辑
SelectedClicked4当一个已经被选中的项目被鼠标单击时开始编辑
EditKeyPressed8当平台编辑键被在项目上按下时开始编辑
AnyKeyPressed16当任何键在项目上按下时开始编辑
AllEditTriggers31上述所有动作都将开始编辑

Public Slots 槽函数

槽函数说明备注
clearSelection()取消选择所有选定项当前索引不改变
edit(QModelIndex &index)开始编辑与给定索引对应的项(如果它是可编辑的)注意此函数不会改变当前索引,用户可能会发现键盘导航异常。请在调用此函数前调用setCurrentIndex()
reset()重置视图内部状态已经做出的修改将不会被保存。如想在重置时commit修改,请重新实现此方法:先commit修改,然后调用超类
scrollToBottom()滚动到视图底部
scrollToTop()滚动到视图顶部
selectAll()选择视图内的全部项目
setCurrentIndex(QModelIndex &index)将当前项设置为index处的项目除非当前选择模式为NoSelection,否则项目也会同时被选中
setRootIndex(QModelIndex &index)设置给定的index为根项目
update(QModelIndex &index)更新给定index所占用的区域

Signals 信号

信号说明备注
activated(QModelIndex &index)当用户激活项目时发送此信号,传出项目索引如何“激活”取决于平台,如鼠标单击/双击项目、Enter键
clicked(QModelIndex &index)当鼠标左键单击时发送此信号,点击的项目的索引作为参数传出只有索引有效时才发送
doubleClicked(QModelIndex &index)鼠标双击时发送此信号,点击的项目的索引作为参数传出只有索引有效时才发送
entered(QModelIndex &index)当鼠标光标进入项目时发送此信号,项目索引作为参数传出需要开启鼠标跟踪才能使用
iconSizeChanged(QModelIndex &index)项目图标尺寸改变时传出此信号
pressed(QModelIndex &index)鼠标按键按下时发送此信号,项目索引作为参数传出索引有效时才发送
viewportEntered()当鼠标光标进入时发送此信号需要开启鼠标跟踪才能使用此功能
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值