class QDrag#

QDrag类提供基于MIME的拖放数据传输支持。更多信息...

Inheritance diagram of PySide6.QtGui.QDrag

概要#

方法#

信号#

静态函数#

备注

本文档可能包含来自 C++ 到 Python 的自动翻译片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译存在问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单来通知我们

详细描述#

警告

本节包含从 C++ 自动转换到 Python 的片段,可能包含错误。

拖放是一种直观的方式,用于用户在应用程序中复制或移动数据,并且在许多桌面环境中作为在应用程序之间复制数据的机制。Qt 中的拖放支持围绕着处理拖放操作大部分细节的 QDrag 类。

将要由拖放操作传输的数据包含在 QMimeData 对象中。这通过以下 setMimeData() 函数指定

drag = QDrag(self)
mimeData = QMimeData()
mimeData.setText(commentEdit.toPlainText())
drag.setMimeData(mimeData)

注意,setMimeData() 将 QMimeData 对象的所有权分配给了 QDrag 对象。必须使用具有 QObject 父对象的堆构造 QDrag,以确保 Qt 可以在拖放操作完成后进行清理。

在拖动过程中,可以使用位图来表示数据,并且它会随着光标移动到目标位置。这个位图通常显示了代表正在传输的数据的 MIME 类型的图标,但可以使用 setPixmap() 设置任何位图。可以借助 setHotSpot() 函数来给光标热点的位置指定相对于位块左上角的相对位置。以下代码将位图定位,使得光标热点指向其底边中心。

drag.setHotSpot(QPoint(drag.pixmap().width()/2,
                        drag.pixmap().height()))

备注

在 X11 上,如果热点导致位图直接显示在光标下方,位图可能无法跟上鼠标移动。

可以使用 source()target() 来查找源控件和目标控件。这些函数通常用于确定拖放操作是在同一个控件中开始和结束的,从而可以实现特殊行为。

QDrag 仅处理拖放操作本身。开发者有权决定何时开始拖动操作以及如何构造和使用 QDrag 对象。对于特定的控件,通常需要重写 mousePressEvent() 以确定用户是否按下了鼠标按钮,并重新实现 mouseMoveEvent() 以检查是否需要 QDrag

参阅

拖放 QClipboard QMimeDataDraggable 图标 示例拖放 示例拖放 网站 示例

__init__(dragSource)#
参数:

dragSource - QObject

为由 dragSource 指定的控件构造一个新的拖动对象。

actionChanged(action)#
参数:

action - DropAction

当与拖动相关的动作发生改变时,会发出这个信号。

静态 cancel()#

取消由 Qt 启动的拖动操作。

备注

目前这已经在 Windows 和 X11 上实现。

参阅

exec()

defaultAction()#
返回类型:

DropAction

返回此拖动操作的默认推荐放置动作。

dragCursor(action)#
参数:

action - DropAction

返回类型:

QPixmap

返回拖动操作的 action 拖拽光标。

exec([supportedActions=Qt.MoveAction])#
参数:

supportedActionsDropAction 组合

返回类型:

DropAction

开始拖放操作,并返回完成时请求的放置动作。用户可以选择的放置动作在 supportedActions 中指定。在允许的操作中,将按以下顺序选择默认推荐操作:移动、复制和链接。

备注

在 Linux 和 macOS 上,拖放操作可能需要一些时间,但此函数不会阻塞事件循环。在操作执行期间,其他事件仍然被发送到应用程序。在 Windows 上,Qt 事件循环在操作期间被阻塞。

参阅

cancel()

exec(supportedActions, defaultAction)
参数:
返回类型:

DropAction

开始拖放操作,并返回完成时请求的放置动作。用户可以选择的放置动作在 supportedActions 中指定。

defaultDropAction 决定了用户在没有使用修饰键进行拖动时,将提出哪种操作。

备注

在 Linux 和 macOS 上,拖放操作可能需要一些时间,但此函数不会阻塞事件循环。在操作执行期间,其他事件仍然被发送到应用程序。在 Windows 上,Qt 事件循环在操作期间被阻塞。然而,Windows 上的 exec() 会导致 processEvents() 被频繁调用,以保持 GUI 的响应性。如果在拖动操作激活时调用任何循环或操作,它将阻止拖动操作。

exec_(arg__1, arg__2)#
参数:
返回类型:

DropAction

exec_([supportedActions=Qt.MoveAction])
参数:

supportedActionsDropAction 组合

返回类型:

DropAction

hotSpot()#
返回类型:

QPoint

返回热点的位置,相对于鼠标光标左上角的位置。

参阅

setHotSpot()

mimeData()#
返回类型:

QMimeData

返回拖拽对象封装的 MIME 数据。

参阅

setMimeData()

pixmap()#
返回类型:

QPixmap

返回用于表示拖放操作中数据的位图。

参阅

setPixmap()

setDragCursor(cursor, action)#
参数:

设置拖拽操作的动作光标。这允许你覆盖默认的本地光标。要恢复使用 action 的本地光标,请将空 QPixmap 作为 cursor 传入。

注意:对于 IgnoreAction 设置拖拽光标可能在所有平台上都不起作用。X11 和 macOS 已被测试过可以工作。Windows 不支持。

参阅

dragCursor()

setHotSpot(hotspot)#
参数:

hotspotQPoint

设置热点的位置,相对于用来拖拽的位图左上角的位置。

备注

注意:在 X11 上,如果热点导致位图直接显示在光标下方,位图可能无法跟上鼠标的移动。

参阅

hotSpot()

setMimeData(data)#
参数:

dataQMimeData

设置要发送给指定 MIME data 的数据。数据的所有权将转移给 QDrag 对象。

参阅

mimeData()

setPixmap(arg__1)#
参数:

arg__1QPixmap

设置为拖放操作中表示数据的占位符。您只能在开始拖放之前设置占位符。

参阅

pixmap()

source()#
返回类型:

QObject

返回拖拽对象的源。这是拖放操作开始的部件。

supportedActions()#
返回类型:

原始组合 DropAction

返回此拖动操作可能的心态操作集。

target()#
返回类型:

QObject

返回拖放操作的目标。这是将拖拽对象放置的部件。

targetChanged(newTarget)#
参数:

newTargetQObject

当拖放操作的目标改变时,会触发此信号,其中newTarget为新目标。