QDrag 类为基于 MIME (多用途 Internet 邮件扩展) 的拖放数据传输提供支持。 更多...
头: | #include <QDrag> |
CMake: |
find_package(Qt6 COMPONENTS Gui REQUIRED)
target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
继承: | QObject |
QDrag (QObject * dragSource ) | |
virtual | ~QDrag () |
Qt::DropAction | defaultAction () const |
QPixmap | dragCursor (Qt::DropAction action ) const |
Qt::DropAction | exec (Qt::DropActions supportedActions = Qt::MoveAction) |
Qt::DropAction | exec (Qt::DropActions supportedActions , Qt::DropAction defaultDropAction ) |
QPoint | hotSpot () const |
QMimeData * | mimeData () const |
QPixmap | pixmap () const |
void | setDragCursor (const QPixmap & cursor , Qt::DropAction action ) |
void | setHotSpot (const QPoint & hotspot ) |
void | setMimeData (QMimeData * data ) |
void | setPixmap (const QPixmap & pixmap ) |
QObject * | source () const |
Qt::DropActions | supportedActions () const |
QObject * | target () const |
void | actionChanged (Qt::DropAction action ) |
void | targetChanged (QObject * newTarget ) |
void | cancel () |
拖放是用户围绕在应用程序中拷贝 (或移动) 数据的直观方式,且很多桌面环境将其用作在应用程序之间拷贝数据的机制。Qt 支持的拖放围绕中心 QDrag 类,处理大部分拖放操作细节。
通过拖放操作要转移的数据,包含于 QMimeData 对象。这的指定是采用 setMimeData () 函数按以下方式:
QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; mimeData->setText(commentEdit->toPlainText()); drag->setMimeData(mimeData);
注意, setMimeData () 赋值所有权对于 QMimeData 对象给 QDrag 对象。QDrag 必须构造于堆采用父级 QObject 以确保 Qt 可以清理在拖放操作完成后。
像素图可以用来表示正在进行的拖拽数据,且会随着光标移到拖拽目标。像素图通常展示表示正传输数据的 MIME (多用途 Internet 邮件扩展) 类型的图标,但可以设置任何像素图采用 setPixmap ()。光标热点可以给出像素图左上角的相对位置,采用 setHotSpot () 函数。以下代码定位像素图,以便光标热点指向其底边中心:
drag->setHotSpot(QPoint(drag->pixmap().width()/2, drag->pixmap().height()));
注意: 在 X11,像素图可能无法跟上鼠标的移动,若热点导致像素图直接显示在光标下方。
可以找到源和目标 Widget 采用 source () 和 target ()。这些函数经常用于确定拖放操作是否开始和完成于同一 Widget,以便可以实现特殊行为。
QDrag 仅处理拖放操作本身。由开发者决定何时开始拖拽操作,及如何构造和使用 QDrag 对象。对于给定 Widget,经常有必要重实现 mousePressEvent() 以确定用户是否有按下鼠标按钮,和重实现 mouseMoveEvent() 以校验是否要求 QDrag。
另请参阅 拖放 , QClipboard , QMimeData , 可拖拽图标范例 , 可拖拽文本范例 , 掉落站点范例 ,和 冰箱磁贴范例 .
为小部件构造新的拖拽对象指定通过 dragSource .
[signal]
void
QDrag::
actionChanged
(
Qt::DropAction
action
)
此信号被发射当 action 关联的拖拽改变。
另请参阅 targetChanged ().
[signal]
void
QDrag::
targetChanged
(
QObject
*
newTarget
)
此信号被发射当拖放操作的目标改变时,带有 newTarget 新目标。
另请参阅 target () 和 actionChanged ().
[虚拟]
QDrag::
~QDrag
()
销毁拖拽对象。
[static, since 5.7]
void
QDrag::
cancel
()
取消由 Qt 初启的拖拽操作。
注意: 目前这在 Windows 和 X11 上有实现。
该函数在 Qt 5.7 引入。
另请参阅 exec ().
返回此拖拽操作的默认提议拖拽动作。
另请参阅 exec () 和 supportedActions ().
[since 5.0]
QPixmap
QDrag::
dragCursor
(
Qt::DropAction
action
) const
返回拖拽光标为 action .
该函数在 Qt 5.0 引入。
另请参阅 setDragCursor ().
启动拖放操作,并在完成时返回指示请求拖拽动作的值。用户可以选择掉落动作从指定 supportedActions 。默认提议动作将按以下次序从允许动作选择:Move、Copy 和 Link。
注意: 在 Linux 和 macOS,拖放操作可能需要一些时间,但此函数不会阻塞事件循环。仍会将其它事件交付给应用程序,在操作履行期间。在 Windows,会阻塞 Qt 事件循环在操作期间。
另请参阅 cancel ().
启动拖放操作,并在完成时返回指示请求拖拽动作的值。用户可以选择掉落动作从指定 supportedActions .
defaultDropAction 确定将提议哪个动作,当用户不使用修饰符键履行拖拽时。
注意: 在 Linux 和 macOS,拖放操作可能需要一些时间,但此函数不会阻塞事件循环。仍会将其它事件交付给应用程序,在操作履行期间。在 Windows,会阻塞 Qt 事件循环在操作期间。不管怎样, QDrag::exec () 在 Windows 导致频繁调用 processEvents() 以保持 GUI 响应。若在拖拽操作活动时调用任何循环 (或操作),将阻塞拖拽操作。
返回相对于光标左上角的热点位置。
另请参阅 setHotSpot ().
返回由拖拽对象封装的 MIME 数据。
另请参阅 setMimeData ().
返回用于在拖放操作中表示数据的像素图。
另请参阅 setPixmap ().
设置拖拽 cursor 为 action 。这允许覆盖默认本机光标。要恢复使用本机光标对于 action 传入 null QPixmap as cursor .
Note: setting the drag cursor for IgnoreAction may not work on all platforms. X11 and macOS has been tested to work. Windows does not support it.
另请参阅 dragCursor ().
设置相对于像素图左上角的热点位置,使用点的指定通过 hotspot .
注意: 在 X11,像素图可能无法跟上鼠标的移动,若热点导致像素图直接显示在光标下方。
另请参阅 hotSpot ().
将要发送数据设为给定 MIME data 。数据的所有权被转移给 QDrag 对象。
另请参阅 mimeData ().
设置 pixmap 作为用于表示拖放操作数据的像素图。才可以设置像素图,在拖拽开始前。
另请参阅 pixmap ().
返回拖拽对象的源。这是拖放操作的发源 Widget。
返回此拖拽操作的,一组可能掉落操作。
另请参阅 exec () 和 defaultAction ().
返回拖放操作的目标。这是拖拽对象的掉落 Widget。