在《PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系》介绍了视图中dragDropMode属性对dragEnabled属性的影响,实际上除了dragDropMode属性对dragEnabled属性有影响之外,对acceptDrops属性也有类似的影响。

经老猿验证测试如下场景:

  • 当dragDropMode设置为DragOnly、DragDrop、InternalMove时,会自动将视图dragEnabled设置为True
  • 当dragDropMode设置为DropOnly、NoDragDrop时,会自动将dragEnabled设置为False
  • 当修改dragEnabled值时,对dragDropMode属性没有影响,但是需要视图支持拖拽,这两个属性都必须支持拖拽,如果一个不支持,则视图无法拖拽
  • 当dragDropMode设置为DropOnly、DragDrop、InternalMove时,会自动将视图的acceptDrops属性、以及视图视口的acceptDrops设置为True
  • 当dragDropMode设置为DragOnly、NoDragDrop时,会自动将视图的acceptDrops属性、以及视图视口的acceptDrops设置为False
  • 当视图的acceptDrops设置为False时,视图视口的acceptDrops同时设置为设置为False,dragDropMode属性如果支持放下,则会将放下去除,如dragDropMode原来为DragDrop,则变为了DragOnly,运行时视图内不能拖放
  • 当视图的acceptDrops设置为True时,视图视口的acceptDrops同时设置为设置为True,dragDropMode属性如果不支持放下,则会改为支持放下,如dragDropMode原来为DragOnly,则变为了DragDrop,运行时视图内可以拖放
  • 当视图对应视口的acceptDrops设置为False时,视图的acceptDrops属性和dragDropMode属性保持不变,但视图中的拖拽数据只能拖动无法放下
  • 当视图对应视口的acceptDrops设置为True时,视图的acceptDrops属性和dragDropMode属性保持不变,但不论视图原来相关属性是否支持拖拽数据放下,视图中的拖拽数据都能放下

从上述场景综合来看,视图中的dragDropMode、dragEnabled和acceptDrops属性相互关系如下:

  • 视图中的dragDropMode属性、acceptDrops属性 相互之间都会互相影响,最终效果受这些属性设置语句的执行先后影响,后执行的影响先执行
  • 视图中的dragDropMode属性 对dragEnabled是单向影响,即dragDropMode设置值时会根据情况改变dragEnabled的值,但反过来不行,不过最终是否允许拖拽需要这两个属性都支持拖拽才行
  • 视图对应视口的acceptDrops属性值改变不会影响视图的dragDropMode、和acceptDrops属性,但视图中如果要支持拖放,需要这三个属性都支持拖放才可

关于视图视口,实际上就是视图中数据可见部分的窗体,所有需要展示的数据都需要滚动到视口才可见。可以通过视图的viewport()方法访问。关于视口更多的说明请参考《PyQt(Python+Qt)学习随笔:QAbstractScrollArea的viewPort(视口)理解

老猿Python,跟老猿学Python!

PyQt(Python+Qt)学习随笔:视图中的dragDropMode属性对dragEnabled和acceptDrops属性的影响的更多相关文章

  1. PyQt(Python+Qt)学习随笔: QAbstractItemView的dragDropMode属性

    老猿Python博文目录 老猿Python博客地址 一.概述 dragDropMode属性用于控制视图拖放事件的处理方式,其类型为枚举类型DragDropMode. 二.枚举类型DragDropMod ...

  2. PyQt(Python+Qt)学习随笔:布局控件layout的LeftMargin等contentsMargins属性

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

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

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

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

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

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

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

  6. PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性

    老猿Python博文目录 老猿Python博客地址 一.属性的作用 dragDropOverwriteMode属性用于控制视图的拖放行为,如果其值为True,则视图中选定的数据将在拖拽数据放下时被覆盖 ...

  7. PyQt(Python+Qt)学习随笔:Qt Designer中部件的autoFillBackground属性

    autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景.使用的颜色由部件调色板中的QPalette.window 角色定义(关 ...

  8. PyQt(Python+Qt)学习随笔:Qt Designer中部件的accessibleDescription和accessibleName辅助阅读属性

    accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性(关于国际化请参考<PyQt(Python+Qt)学习随笔:Qt D ...

  9. PyQt(Python+Qt)学习随笔:Qt Designer中部件的toolTip、toolTipDuration、statusTip、whatsThis属性

    toolTip属性 toolTip属性设置部件的toolTip提示信息,toolTip提示信息在鼠标放到控件上会浮动出一个小框显示提示信息.默认情况下,仅显示活动窗口子部件的toolTip,可以通过在 ...

随机推荐

  1. 【转载】Apriori

    通过这个博客学习:数据挖掘十大算法(四):Apriori(关联分析算法) 代码也是摘自上面博客,对照代码理解理论部分可能更加有助于对该算法的理解 from numpy import * # 构造数据 ...

  2. IL角度理解for 与foreach的区别——迭代器模式

    IL角度理解for 与foreach的区别--迭代器模式 目录 IL角度理解for 与foreach的区别--迭代器模式 1 最常用的设计模式 1.1 背景 1.2 摘要 2 遍历元素 3 删除元素 ...

  3. Mycat分库分表(一)

    随着业务变得越来越复杂,用户越来越多,集中式的架构性能会出现巨大的问题,比如系统会越来越慢,而且时不时会宕机,所以必须要解决高性能和可用性的问题.这个时候数据库的优化就显得尤为重要,在说优化方案前,先 ...

  4. Pytorch显存动态分配规律探索

    下面通过实验来探索Pytorch分配显存的方式. 实验 显存到主存 我使用VSCode的jupyter来进行实验,首先只导入pytorch,代码如下: import torch 打开任务管理器查看主存 ...

  5. 四:Redis五大数据类型

    Redis的五大数据类型 1.string(字符串) string是Redis最基本的类型,你可以理解成与menmcached一模一样的类型,一个key对应一个value string类型是二进制安全 ...

  6. sql实现通过父级id查询所有的子集

    通过sql实现传入父级id查询出所有的子集 最近刚好有个业务需要这样实现个功能,就是在点击查询列表详情的时候只会传入父级id,而详情得渲染出所有子集,那么做法有很多,可以直接通过代码递归查询去实现, ...

  7. 虚拟机、ip地址

    使用的系统 虚拟机:VMware workstations+win10:注:系统装好后先切换成Administrator,给VMware装VMware Tools linux发行版本  rhel-se ...

  8. JS简单介绍与简单的基本语法

    1.JavaScirpt是一门编程语言,是为前端服务的一门语言. (1)基础语法 (2)数据类型 (3)函数 (4)面向对象 2.还涉及到BOM和DOM (1)BOM(操作浏览器的一些功能) (2)D ...

  9. 关于点击弹框外部区域弹框关闭的交互处理(前端JS)

    常见需求场景 前端在处理交互的时候,经常遇到这样的场景,点击一个按钮,出现一个弹框,点击外部区域,弹框关闭. 解决方法 思路说明: 1.给弹框的div父级都加个类名,如: 2.在document绑定一 ...

  10. JVM(一)-JVM入门

    JVM的定义: JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的 ...