- class QDrag#
QDrag
类提供基于MIME的拖放数据传输支持。更多信息...概要#
方法#
def
__init__()
def
defaultAction()
def
dragCursor()
def
exec()
def
exec_()
def
hotSpot()
def
mimeData()
def
pixmap()
def
setDragCursor()
def
setHotSpot()
def
setMimeData()
定义
setPixmap()
定义
source()
定义
target()
信号#
静态函数#
定义
cancel()
备注
本文档可能包含来自 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 图标 示例拖放 示例拖放 网站 示例
为由
dragSource
指定的控件构造一个新的拖动对象。- actionChanged(action)#
- 参数:
action -
DropAction
当与拖动相关的动作发生改变时,会发出这个信号。
- 静态 cancel()#
取消由 Qt 启动的拖动操作。
- defaultAction()#
- 返回类型:
返回此拖动操作的默认推荐放置动作。
- dragCursor(action)#
- 参数:
action -
DropAction
- 返回类型:
返回拖动操作的
action
拖拽光标。- exec([supportedActions=Qt.MoveAction])#
- 参数:
supportedActions –
DropAction
组合- 返回类型:
开始拖放操作,并返回完成时请求的放置动作。用户可以选择的放置动作在
supportedActions
中指定。在允许的操作中,将按以下顺序选择默认推荐操作:移动、复制和链接。备注
在 Linux 和 macOS 上,拖放操作可能需要一些时间,但此函数不会阻塞事件循环。在操作执行期间,其他事件仍然被发送到应用程序。在 Windows 上,Qt 事件循环在操作期间被阻塞。
参阅
- exec(supportedActions, defaultAction)
- 参数:
supportedActions –
DropAction
组合defaultAction –
DropAction
- 返回类型:
开始拖放操作,并返回完成时请求的放置动作。用户可以选择的放置动作在
supportedActions
中指定。defaultDropAction
决定了用户在没有使用修饰键进行拖动时,将提出哪种操作。备注
在 Linux 和 macOS 上,拖放操作可能需要一些时间,但此函数不会阻塞事件循环。在操作执行期间,其他事件仍然被发送到应用程序。在 Windows 上,Qt 事件循环在操作期间被阻塞。然而,Windows 上的
exec()
会导致 processEvents() 被频繁调用,以保持 GUI 的响应性。如果在拖动操作激活时调用任何循环或操作,它将阻止拖动操作。- exec_(arg__1, arg__2)#
- 参数:
arg__1 – 组合
DropAction
arg__2 –
DropAction
- 返回类型:
- exec_([supportedActions=Qt.MoveAction])
- 参数:
supportedActions –
DropAction
组合- 返回类型:
返回热点的位置,相对于鼠标光标左上角的位置。
参阅
返回拖拽对象封装的 MIME 数据。
返回用于表示拖放操作中数据的位图。
参阅
- setDragCursor(cursor, action)#
- 参数:
cursor –
QPixmap
action -
DropAction
设置拖拽操作的动作光标。这允许你覆盖默认的本地光标。要恢复使用
action
的本地光标,请将空QPixmap
作为cursor
传入。注意:对于 IgnoreAction 设置拖拽光标可能在所有平台上都不起作用。X11 和 macOS 已被测试过可以工作。Windows 不支持。
参阅
设置热点的位置,相对于用来拖拽的位图左上角的位置。
设置要发送给指定 MIME
data
的数据。数据的所有权将转移给QDrag
对象。参阅
将
设置为拖放操作中表示数据的占位符。您只能在开始拖放之前设置占位符。 参阅
返回拖拽对象的源。这是拖放操作开始的部件。
- supportedActions()#
- 返回类型:
原始组合
DropAction
返回此拖动操作可能的心态操作集。
返回拖放操作的目标。这是将拖拽对象放置的部件。
当拖放操作的目标改变时,会触发此信号,其中
newTarget
为新目标。