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 .

[虛擬] 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 ().