一、属性的作用

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)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性的更多相关文章

  1. PyQt(Python+Qt)学习随笔:QWidget部件的palette属性以及ColorGroup、colorRole的用途和含义

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 1.palette属性 QWidget部件的palette属性用于控制 ...

  2. PyQt(Python+Qt)学习随笔:模式窗口的windowModality属性与modal属性

    windowModality属性 windowModality属性只对窗口对象有效,保存的是哪些类型的窗口被模式窗口阻塞. 模式窗口防止其他窗口中的部件获取输入.此属性的值控制对应窗口可见时阻塞哪些类 ...

  3. PyQt(Python+Qt)学习随笔:布局控件layoutSpacing属性

    在Qt Designer中布局控件有4个,分别是Vertical Layout(垂直布局).Horizontal Layout(水平布局).Grid Layout(网格布局).Form Layout( ...

  4. PyQt(Python+Qt)学习随笔:布局控件layoutStretch属性

    在Qt Designer中布局控件有4个,分别是Vertical Layout(垂直布局).Horizontal Layout(水平布局).Grid Layout(网格布局).Form Layout( ...

  5. PyQt(Python+Qt)学习随笔:利用QWidget部件的palette以及ColorGroup、colorRole局部调整部件的特定范围颜色

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在<PyQt(Python+Qt)学习随笔:QWidget部件的 ...

  6. PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性不能覆盖写的问题

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dra ...

  7. PyQt(Python+Qt)学习随笔:视图中的dragDropMode属性对dragEnabled和acceptDrops属性的影响

    老猿Python博文目录 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系&g ...

  8. PyQt(Python+Qt)学习随笔:视图中的拖放操作注意事项

    老猿Python博文目录 老猿Python博客地址 在通过PyQt构建的图形界面中进行拖放,要成功进行拖放需要注意: 视图相关属性需要支持拖放,具体相关属性请参考<PyQt(Python+Qt) ...

  9. PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled属性的困惑

    老猿Python博文目录 老猿Python博客地址 dragEnabled属性用于控制视图是否支持拖拽,可以通过dragEnabled().setDragEnabled(bool enable)进行属 ...

随机推荐

  1. iOS 导航栏 工具条

    导航栏最常见的例子就是返回按钮的所在 在AppDelegate.m中,代码布局最开始定义窗口的时候, _window.rootViewController就应该为一个UINavigationContr ...

  2. 快速了解阿里微服务热门开源分布式事务框架——Seata

    一.Seata 概述 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来. Seata 是 ...

  3. 面试题:你有没有搞混查询缓存和Buffer Pool

    一. 关注送书!<Netty实战> 文章公号号首发!连载中!关注微信公号回复:"抽奖" 可参加抽活动 首发地址:点击跳转阅读原文,有更好的阅读体验 使用推荐阅读,有更好 ...

  4. 19Jinja2中宏定义

    1 @app.route('/') 2 def hello_world(): 3 return render_template('index.html') 4 5 6 {% macro input(n ...

  5. 利用 Github Actions 的 service container 进行集成测试

    Github Action 中 Service Container 的使用 Intro 之前写过一个 StackExchange.Redis 的一个扩展,测试项目依赖 redis,所以之前测试一直只是 ...

  6. 问题记录-CoordinatorLayout+WebView使用遇到的问题

    需求背景: 使用CoordinatorLayout+viewpager+tablayout+webview实现首页折叠效果. 使用问题: 在使用过程中首页的页面为原生/h5混合页,在原生页面正常,嵌套 ...

  7. Angualr 内置工具-SelectionModel

    SelectionModel: 被用来控制选中一个和多个item时候的逻辑.例如下拉菜单,复选框选中等,非常方便. 引入:import{SelectionModel}from'@angular/cdk ...

  8. 一篇文章了解_unittest

    1. 基本概念 2018年10月7日 星期日 11:39 unittest是python自带的单元测试框架,有时候又被称为"PyUnit",是python版本的JUint实现. 该 ...

  9. C语言设计模式(自我揣摩)

    NBModule.h #ifndef _NBMODULEFRAME_H__ #define _NBMODULEFRAME_H__ #include "total.h" enum N ...

  10. Linux(CentOS6.8)配置Redis

    1.Redis简介 Redis:REmote DIctionary Server(远程字典服务器). Redis是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分 ...