QDrag 類

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 , 可拖拽圖標範例 , 可拖拽文本範例 , 掉落站點範例 ,和 冰箱磁貼範例 .

成員函數文檔編製

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] 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。

注意: 在 Linux 和 macOS,拖放操作可能需要一些時間,但此函數不會阻塞事件循環。仍會將其它事件交付給應用程序,在操作履行期間。在 Windows,會阻塞 Qt 事件循環在操作期間。

該函數在 Qt 4.3 引入。

另請參閱 cancel ().

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

啓動拖放操作,並在完成時返迴指示請求拖拽動作的值。用戶可以選擇掉落動作從指定 supportedActions .

The defaultDropAction 確定將提議哪個動作,當用戶不使用修飾符鍵履行拖拽時。

注意: 在 Linux 和 macOS,拖放操作可能需要一些時間,但此函數不會阻塞事件循環。仍會將其它事件交付給應用程序,在操作履行期間。在 Windows,會阻塞 Qt 事件循環在操作期間。不管怎樣, 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。