The QDrag 类为基于 MIME (多用途 Internet 邮件扩展) 的拖放数据传输提供支持。 更多...
头: | #include <QDrag> |
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 () |
const QMetaObject | staticMetaObject |
The QDrag 类为基于 MIME (多用途 Internet 邮件扩展) 的拖放数据传输提供支持。
拖放是用户围绕应用程序拷贝 (或移动) 数据的直观方式,且在许多桌面环境被用作在应用程序之间拷贝数据的机制。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 , QMacPasteboardMime , 可拖拽图标范例 , 可拖拽文本范例 , 掉落站点范例 ,和 冰箱磁贴范例 .
为小部件构造新的拖拽对象指定通过 dragSource .
[虚拟]
QDrag::
~QDrag
()
销毁拖拽对象。
[signal]
void
QDrag::
actionChanged
(
Qt::DropAction
action
)
此信号发射当 action 关联的拖拽改变。
另请参阅 targetChanged ().
[static]
void
QDrag::
cancel
()
取消由 Qt 初启的拖拽操作。
注意: 目前这在 Windows 和 X11 上有实现。
该函数在 Qt 5.7 引入。
另请参阅 exec ().
返回此拖拽操作的默认提议拖拽动作。
另请参阅 exec () 和 supportedActions ().
返回拖拽光标为 action .
该函数在 Qt 5.0 引入。
另请参阅 setDragCursor ().
启动拖放操作,并在完成时返回指示请求拖拽动作的值。用户可以选择掉落动作从指定 supportedActions 。默认提议动作将按以下次序从允许动作选择:Move、Copy 和 Link。
注意: On Linux and macOS , the drag and drop operation can take some time, but this function does not block the event loop. Other events are still delivered to the application while the operation is performed. On Windows, the Qt event loop is blocked during the operation.
该函数在 Qt 4.3 引入。
另请参阅 cancel ().
启动拖放操作,并在完成时返回指示请求拖拽动作的值。用户可以选择掉落动作从指定 supportedActions .
The defaultDropAction 确定将提议哪个动作,当用户不使用修饰符键履行拖拽时。
注意: On Linux and macOS , the drag and drop operation can take some time, but this function does not block the event loop. Other events are still delivered to the application while the operation is performed. On Windows, the Qt event loop is blocked during the operation. However, QDrag::exec () 在 Windows 导致频繁调用 processEvents() 以保持 GUI 响应。若在拖拽操作活动时调用任何循环 (或操作),将阻塞拖拽操作。
该函数在 Qt 4.3 引入。
返回相对于光标左上角的热点位置。
另请参阅 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。
[signal]
void
QDrag::
targetChanged
(
QObject
*
newTarget
)
此信号被发射当拖放操作的目标改变时,带有 newTarget 新目标。
另请参阅 target () 和 actionChanged ().