QDrag 类

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

成员函数文档编制

QDrag:: QDrag ( QObject * dragSource )

为小部件构造新的拖拽对象指定通过 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 ().

Qt::DropAction QDrag:: defaultAction () const

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

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

[since 5.0] 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。

注意: 在 Linux 和 macOS,拖放操作可能需要一些时间,但此函数不会阻塞事件循环。仍会将其它事件交付给应用程序,在操作履行期间。在 Windows,会阻塞 Qt 事件循环在操作期间。

另请参阅 cancel ().

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

启动拖放操作,并在完成时返回指示请求拖拽动作的值。用户可以选择掉落动作从指定 supportedActions .

defaultDropAction 确定将提议哪个动作,当用户不使用修饰符键履行拖拽时。

注意: 在 Linux 和 macOS,拖放操作可能需要一些时间,但此函数不会阻塞事件循环。仍会将其它事件交付给应用程序,在操作履行期间。在 Windows,会阻塞 Qt 事件循环在操作期间。不管怎样, QDrag::exec () 在 Windows 导致频繁调用 processEvents() 以保持 GUI 响应。若在拖拽操作活动时调用任何循环 (或操作),将阻塞拖拽操作。

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。