PySide6.QtGui.QDrag

class QDrag

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

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 对象。QDrag 必须在堆上构造,并具有父 QObject,以确保 Qt 在拖放操作完成后可以清理。

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

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

注意

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

源和目标部件可以通过source()target()找到。这些函数通常用于确定拖放操作是否在同一个部件上开始和结束,以便实现特殊行为。

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

另请参阅

拖放 QClipboard QMimeDataDraggable 图标 可拖动示例 文本 拖放示例 站点 示例

__init__(dragSource)
Parameters:

dragSourceQObject

dragSource指定的小部件构造一个新的拖动对象。

actionChanged(action)
Parameters:

动作DropAction

当与拖动相关的action发生变化时,会发出此信号。

另请参阅

targetChanged()

static cancel()

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

注意

目前已在Windows和X11上实现。

另请参阅

exec()

defaultAction()
Return type:

DropAction

返回此拖动操作的默认建议放置动作。

另请参阅

exec() supportedActions()

dragCursor(action)
Parameters:

动作DropAction

Return type:

QPixmap

返回action的拖动光标。

另请参阅

setDragCursor()

exec([supportedActions=Qt.MoveAction])
Parameters:

supportedActionsDropAction 的组合

Return type:

DropAction

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

注意

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

另请参阅

cancel()

exec(supportedActions, defaultAction)
Parameters:
Return type:

DropAction

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

defaultDropAction 决定了当用户在不使用修饰键的情况下执行拖放操作时,将建议执行哪个操作。

注意

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

exec_([supportedActions=Qt.MoveAction])
Parameters:

supportedActionsDropAction 的组合

Return type:

DropAction

exec_(arg__1, arg__2)
Parameters:
Return type:

DropAction

hotSpot()
Return type:

QPoint

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

另请参阅

setHotSpot()

mimeData()
Return type:

QMimeData

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

另请参阅

setMimeData()

pixmap()
Return type:

QPixmap

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

另请参阅

setPixmap()

setDragCursor(cursor, action)
Parameters:

设置拖动光标动作。这允许你覆盖默认的原生光标。要恢复使用动作的原生光标,请传入一个空的QPixmap作为光标

注意:为 IgnoreAction 设置拖动光标可能无法在所有平台上工作。已测试 X11 和 macOS 可以工作。Windows 不支持此功能。

另请参阅

dragCursor()

setHotSpot(hotspot)
Parameters:

热点QPoint

设置热点相对于所使用的位图左上角的位置到由hotspot指定的点。

注意

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

另请参阅

hotSpot()

setMimeData(data)
Parameters:

数据QMimeData

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

另请参阅

mimeData()

setPixmap(pixmap)
Parameters:

pixmapQPixmap

pixmap设置为用于表示拖放操作中数据的位图。您只能在拖放开始之前设置位图。

另请参阅

pixmap()

source()
Return type:

QObject

返回拖动对象的源。这是拖放操作起源的小部件。

supportedActions()
Return type:

DropAction的组合

返回此拖动操作可能的放置动作集合。

另请参阅

exec() defaultAction()

target()
Return type:

QObject

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

targetChanged(newTarget)
Parameters:

newTargetQObject

当拖放操作的目标发生变化时,会发出此信号,newTarget 是新的目标。

另请参阅

target() actionChanged()