QDrag 类

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 , 可拖曳图标范例 , 可拖曳文本范例 , 掉落站点范例 ,和 冰箱磁贴范例 .

成员函数文档编制

QDrag:: QDrag ( QObject * dragSource )

为小部件构造新的拖拽对象指定通过 dragSource .

[virtual] QDrag:: ~QDrag ()

销毁拖曳对象。

[signal] void QDrag:: actionChanged ( Qt::DropAction action )

此信号被发射当 action 关联的拖拽改变。

另请参阅 targetChanged ().

[static] void QDrag:: cancel ()

取消由 Qt 初启的拖拽操作。

注意: 目前这在 Windows 和 X11 上有实现。

该函数在 Qt 5.7 引入。

另请参阅 exec ().

Qt::DropAction QDrag:: defaultAction () const

返回此拖曳操作的默认提议拖曳动作。

另请参阅 exec () 和 supportedActions ().

QPixmap QDrag:: dragCursor ( Qt::DropAction action ) const

返回拖曳光标为 action .

该函数在 Qt 5.0 引入。

另请参阅 setDragCursor ().

Qt::DropAction QDrag:: exec ( Qt::DropActions supportedActions = Qt::MoveAction)

启动拖放操作,并在完成时返回指示请求拖曳动作的值。用户可以选择掉落动作从指定 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 ().

Qt::DropAction QDrag:: exec ( Qt::DropActions supportedActions , Qt::DropAction defaultDropAction )

启动拖放操作,并在完成时返回指示请求拖曳动作的值。用户可以选择掉落动作从指定 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 引入。

QPoint QDrag:: hotSpot () const

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

另请参阅 setHotSpot ().

QMimeData *QDrag:: mimeData () const

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

另请参阅 setMimeData ().

QPixmap QDrag:: pixmap () const

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

另请参阅 setPixmap ().

void QDrag:: setDragCursor (const QPixmap & cursor , Qt::DropAction action )

设置拖曳 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 ().

void QDrag:: setHotSpot (const QPoint & hotspot )

设置相对于像素图左上角的热点位置,使用点的指定通过 hotspot .

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

另请参阅 hotSpot ().

void QDrag:: setMimeData ( QMimeData * data )

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

另请参阅 mimeData ().

void QDrag:: setPixmap (const QPixmap & pixmap )

pixmap 作为用于表示拖放操作数据的像素图。才可以设置像素图,在拖曳开始前。

另请参阅 pixmap ().

QObject *QDrag:: source () const

返回拖曳对象的源。这是拖放操作的发源 Widget。

Qt::DropActions QDrag:: supportedActions () const

返回此拖曳操作的,一组可能掉落操作。

另请参阅 exec () 和 defaultAction ().

QObject *QDrag:: target () const

返回拖放操作的目标。这是拖曳对象的掉落 Widget。

[signal] void QDrag:: targetChanged ( QObject * newTarget )

此信号被发射当拖放操作的目标改变时,带有 newTarget 新目标。

另请参阅 target () 和 actionChanged ().