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 () |
拖放是用戶圍繞在應用程序中拷貝 (或移動) 數據的直觀方式,且很多桌麵環境將其用作在應用程序之間拷貝數據的機製。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 .
[signal]
void
QDrag::
actionChanged
(
Qt::DropAction
action
)
此信號發射,當 action 關聯的拖拽改變。
另請參閱 targetChanged ().
[signal]
void
QDrag::
targetChanged
(
QObject
*
newTarget
)
此信號被發射當拖放操作的目標改變時,帶有 newTarget 新目標。
另請參閱 target () 和 actionChanged ().
[虛擬]
QDrag::
~QDrag
()
銷毀拖拽對象。
[static]
void
QDrag::
cancel
()
取消由 Qt 初啓的拖拽操作。
注意: 目前這在 Windows 和 X11 上有實現。
該函數在 Qt 5.7 引入。
另請參閱 exec ().
返迴此拖拽操作的默認提議拖拽動作。
另請參閱 exec () 和 supportedActions ().
返迴拖拽光標為 action .
該函數在 Qt 5.0 引入。
另請參閱 setDragCursor ().
啓動拖放操作,並在完成時返迴指示請求拖拽動作的值。用戶可以選擇掉落動作從指定 supportedActions 。默認提議動作將按以下次序從允許動作選擇:Move、Copy 和 Link。
注意: 在 Linux 和 macOS,拖放操作可能需要一些時間,但此函數不會阻塞事件循環。仍會將其它事件交付給應用程序,在操作履行期間。在 Windows,會阻塞 Qt 事件循環在操作期間。
該函數在 Qt 4.3 引入。
另請參閱 cancel ().
啓動拖放操作,並在完成時返迴指示請求拖拽動作的值。用戶可以選擇掉落動作從指定 supportedActions .
The defaultDropAction 確定將提議哪個動作,當用戶不使用修飾符鍵履行拖拽時。
注意: 在 Linux 和 macOS,拖放操作可能需要一些時間,但此函數不會阻塞事件循環。仍會將其它事件交付給應用程序,在操作履行期間。在 Windows,會阻塞 Qt 事件循環在操作期間。不管怎樣, 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。