QDrag 类
QDrag 类提供基于 MIME 的拖放数据传输支持。 更多...
头文件 | #include <QDrag> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
继承 | QObject |
公共函数
QDrag(QObject *dragSource) | |
虚拟 | ~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类型,但是可以使用setPixmap()()方法设置任何位图。可以使用setHotSpot()()函数将光标的热区位置设置为相对于位图的左上角。以下代码将位图定位,使光标的热区指向位图底部边缘的中心
drag->setHotSpot(QPoint(drag->pixmap().width()/2, drag->pixmap().height()));
注意:在X11上,如果热区导致位图直接显示在光标下,位图可能无法跟上鼠标的移动。
可以使用source()和target()找到源控件和目标控件。这些函数通常用于确定拖放操作是否在同一控件上开始和完成,以便实现特殊行为。
QDrag只处理拖放操作本身。开发者决定何时开始拖动操作以及如何构建和使用QDrag对象。对于给定的控件,通常需要重写mousePressEvent()以确定用户是否按下了鼠标按钮,并重写mouseMoveEvent()以检查是否需要QDrag。
另请参阅:拖放操作、QClipboard、QMimeData、可拖拽图标示例、可拖拽文本示例和放置点示例。
成员函数文档
[显式构造]
QDrag::QDrag(QObject *dragSource)
使用dragSource指定的控件构造一个新拖动对象。
[虚拟 noexcept]
QDrag::~QDrag()
销毁拖动对象。
[信号]
void QDrag::actionChanged(Qt::DropAction action)
当与拖动关联的action更改时,将发出此信号。
另请参阅:targetChanged。
[静态]
void QDrag::cancel()
取消Qt启动的拖放操作。
注意:目前此操作在Windows和X11上实现。
另请参阅:exec。
Qt::DropAction QDrag::defaultAction() const
返回此拖动操作默认建议的放置操作。
另请参阅:exec和supportedActions。
QPixmap QDrag::dragCursor(Qt::DropAction action) const
返回action对应的拖动光标。
另请参阅:setDragCursor。
Qt::DropAction QDrag::exec(Qt::DropActions supportedActions = Qt::MoveAction)
开始拖放操作,并在完成后返回一个表示请求的放下动作的值。用户可以选择的放下动作在 supportedActions 中指定。默认建议的操作将在以下顺序中选中允许的操作之一:移动、复制和链接。
注意:在 Linux 和 macOS 上,拖放操作可能需要一些时间,但此函数不会阻塞事件循环。在操作执行期间,其他事件仍然发送到应用程序。在 Windows 上,Qt 事件循环在操作期间被阻塞。
参阅取消。
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
返回热点的相对位置,它与光标左上角的位置有关。
参阅设置热点。
QMimeData *QDrag::mimeData() const
返回封装在拖动对象中的 MIME 数据。
参阅设置 MIME 数据。
QPixmap QDrag::pixmap() const
返回用于在拖放操作中表示数据的位图。
参阅设置位图。
void QDrag::setDragCursor(const QPixmap &cursor, Qt::DropAction action)
设置 action 的拖动 cursor。这允许你覆盖默认的本地光标。要恢复使用 action 的本地光标,请将 cursor 作为一个值为 null 的 QPixmap 传递。
注意:在所有平台上设置 IgnoreAction 的拖动光标可能不起作用。X11 和 macOS 已通过测试。Windows 不支持它。
参阅拖动光标。
void QDrag::setHotSpot(const QPoint &hotspot)
设置相对像素图的左上角的热点位置。
注意:在上一个中,如果热点导致像素图直接显示在光标下面,像素图可能无法跟上鼠标的移动。
参阅热点。
void QDrag::setMimeData(QMimeData *data)
设置要发送给指定 MIME data 的数据。数据的所有权将转移到 QDrag 对象。
另请参阅mimeData。
void QDrag::setPixmap(const QPixmap &pixmap)
将 pixmap 设置为在拖放操作中用于表示数据的图像。您只能在拖放操作开始之前设置图像。
另请参阅pixmap。
QObject *QDrag::source() const
返回拖动对象的数据源。这是拖放操作开始的控件。
Qt::DropActions QDrag::supportedActions() const
返回此拖放操作可能执行的拖放操作的集合。
另请参阅exec() 和 defaultAction。
QObject *QDrag::target() const
返回拖放操作的目标。这是放置拖动对象的控件。
[信号]
void QDrag::targetChanged(QObject *newTarget)
当拖放操作的目标改变时,发出此信号,其中 newTarget 是新的目标。
另请参阅target 和 actionChanged。
© 2024 The Qt Company Ltd. 本文档中的贡献是相应所有者的版权。本提供文档受自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 的条款许可。Qt及其相关标志是芬兰和/或全世界 The Qt Company Ltd. 的商标。所有其他商标均为其各自所有者的财产。