PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性
一、属性的作用
dragDropOverwriteMode属性用于控制视图的拖放行为,如果其值为True,则视图中选定的数据将在拖拽数据放下时被覆盖,如果其值为False,则拖拽的数据将作为新项插入。当DropAction对应动作为拷贝时,上述拖放的源数据保持不变,而DropAction对应动作为移动数据时,上述拖放的源数据会被删除。
默认值为False,如子类QListView和QTreeView就是这样。而在QTableView子类中,该属性设置为True。
二、访问方法
dragDropOverwriteMode() 、setDragDropOverwriteMode(bool overwrite)这两个方法用于访问和设置该属性。
三、补充说明
1、关于拖放以及拖放响应相关方面的内容,老猿做了很多测试,对于dragDropOverwriteMode属性,上面介绍的关于拖放数据释放处的处理是官网上原文翻译的,关于源数据的处理部分则与官网说法有些不同,是老猿根据测试情况理解后写的,原文不太好理解;
2、关于拖放数据放下后的处理,老猿使用ListView与TableView测试的情况与上述说法有些不一致,并且遇到了些问题,具体测试差异如下:
- dragDropOverwriteMode为True时,拖放数据如果在视图最后面释放,则会添加到视图最后面,但在数据项之上释放时,发现无法覆盖,数据行之间释放时也不会执行插入,即此种情况下,只有在视图最后进行释放时数据会添加到视图最后,其他情况下释放处的数据都没有变化
- dragDropOverwriteMode为False时,拖放数据如果在视图最后面或不同行之间释放,则会在释放处插入拖放数据
另外,在做《PyQt(Python+Qt)学习随笔:QAbstractItemView的showDropIndicator属性》相关测试时,发现可以实现官网上实现的功能,即在数据项上释放时能按官网说明(也即上面第一部分介绍)进行释放处理,但在本部分除dragDropOverwriteMode外其他多个属性(包括dragDropMode、defaultDropAction、selectionMode、selectionBehavior、editTriggers等)各种取值测试也没有重现该覆盖功能,可能组合覆盖不全,具体原因老猿还未弄清楚。
修订:
经反复测试,最终验证上述问题产生的原因是由于对应的model不支持覆盖写导致的。因此关于dragDropOverwriteMode属性的功能,描述如下:
dragDropOverwriteMode属性用于控制视图的拖放行为:
- 如果其值为True,且视图对应存储支持,则视图中拖放的数据将在拖拽数据放下时覆盖放下处的数据
- 如果其值为False,且视图对应存储支持,则拖拽的数据将作为新项插入。
当DropAction对应动作为拷贝时,上述拖放的源数据保持不变,而DropAction对应动作为移动数据时,上述拖放的源数据会被删除。
老猿Python,跟老猿学Python!
相关文章
- PyQt(Python+Qt)学习随笔:QWidget部件的palette属性以及ColorGroup、colorRole的用途和含义
- PyQt(Python+Qt)学习随笔:containers容器类部件QMdiArea多文档界面的QMdiSubWindow子窗口相关属性和操作方法
- PyQt(Python+Qt)学习随笔:QTabWidget选项卡部件概述和属性介绍
- PyQt(Python+Qt)学习随笔:QScrollArea滚动区域layout布局的作用及设置方法
- PyQt(Python+Qt)学习随笔:QScrollArea的widgetResizable属性
- PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中使用findItems搜索项
- PyQt(Python+Qt)学习随笔:QTreeWidgetItem项是否首列跨所有列展示属性isFirstColumnSpanned
- PyQt(Python+Qt)学习随笔:QTreeWidget的topLevelItemCount属性
- PyQt(Python+Qt)学习随笔:QTreeWidgetItem项中列的复选状态访问方法
- PyQt(Python+Qt)学习随笔:QListWidget的sortingEnabled属性
- PyQt(Python+Qt)学习随笔:QListView的wordWrap属性
- PyQt(Python+Qt)学习随笔:QTreeView树形视图的sortingEnabled属性
- PyQt(Python+Qt)学习随笔:QListView的movement属性
- PyQt(Python+Qt)学习随笔:Qt Designer中spacer部件的sizeType属性
- PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的clicked信号参数QAbstractButton *解决办法
- PyQt(Python+Qt)学习随笔:Qt Designer中建立CommandLinkButton信号与Action的槽函数连接
- PyQt(Python+Qt)学习随笔:窗口部件大小策略sizePolicy与SizeConstraint布局大小约束的关系
- PyQt(Python+Qt)学习随笔:Qt Designer中QAbstractButton派生按钮部件的shortcut 属性
- PyQt(Python+Qt)学习随笔:Qt Designer组件属性编辑界面中对话窗QDialog的sizeGripEnabled属性
- PyQt(Python+Qt)学习随笔:Qt Designer中主窗口对象的toolButtonStyle属性
- PyQt(Python+Qt)学习随笔:Qt Designer中部件与国际化有关的设置translatable、 disambiguation和comment含义
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的是否接受鼠标拖放事件的acceptDrops属性及含义
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的快捷菜单策略(contextMenuPolicy)取值及含义
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的焦点策略focusPolicy设置
- Python获取脚本所在目录的正确方法(转)
- Python OOP知识积累