QDrag Class

QDrag クラスは、MIME ベースのドラッグ&ドロップによるデータ転送をサポートします。詳細...

Header: #include <QDrag>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Inherits: 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 オブジェクトに割り当てることに注意してください。Qt がドラッグ・アンド・ドロップ操作の完了後にクリーンアップできるように、QDrag は親QObject を持つヒープ上に構築する必要があります。

ドラッグ中にデータを表現するために pixmap を使用することができ、カーソルと一緒にドロップ先まで移動します。このpixmapは通常、転送されるデータのMIMEタイプを表すアイコンを表示するが、setPixmap ()を使用して任意のpixmapを設定することができる。カーソルのホットスポットは、setHotSpot ()関数でpixmapの左上隅からの相対位置を指定することができる。以下のコードでは、カーソルのホットスポットがpixmapの下辺の中央を指すようにpixmapを配置しています:

    drag->setHotSpot(QPoint(drag->pixmap().width()/2,
                            drag->pixmap().height()));

注意: X11の場合、ホットスポットの影響でカーソルの真下にpixmapが表示されると、マウスの動きにpixmapが追いつかないことがあります。

ソースとターゲットのウィジェットは、source() とtarget() で見つけることができます。これらの関数は、ドラッグとドロップの操作が同じウィジェットで開始したか終了したかを判断するためによく使用されます。

QDrag はドラッグ&ドロップ操作そのものだけを扱います。ドラッグ操作をいつ開始するか、QDrag オブジェクトをどのように構築して使用するかは、開発者次第です。あるウィジェットに対して、mousePressEvent() を再実装して、ユーザーがマウスボタンを押したかどうかを判断し、mouseMoveEvent() を再実装して、QDrag が必要かどうかをチェックする必要があります。

Drag and Drop,QClipboard,QMimeData,Draggable Icons Example,Draggable Text Example,Drop Site Exampleも参照してください

メンバー関数 ドキュメント

[explicit] QDrag::QDrag(QObject *dragSource)

dragSource で指定されたウィジェットの新しいドラッグオブジェクトを構築します。

[virtual noexcept] QDrag::~QDrag()

ドラッグオブジェクトを破棄します。

[signal] void QDrag::actionChanged(Qt::DropAction action)

このシグナルは、ドラッグに関連付けられたaction が変更されたときに発行されます。

targetChanged()も参照してください

[static] 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 のイベントループは操作中にブロックされます。

cancel()も参照してください

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

ドラッグ&ドロップ操作を開始し、完了したら要求されたドロップアクションを示す値を返します。ユーザーが選択できるドロップアクションはsupportedActions で指定されています。

defaultDropAction は、ユーザーが修飾キーを使わずにドラッグを実行したときに、どのアクションが提案されるかを決定します。

注意:LinuxとmacOSでは、ドラッグ&ドロップ操作に時間がかかることがありますが、この機能はイベントループをブロックしません。操作が実行されている間も、他のイベントはアプリケーションに配信されます。Windows では、Qt のイベントループは操作中にブロックされます。しかし、WindowsのQDrag::exec ()は、GUIの反応を維持するためにprocessEvents()を頻繁に呼び出します。ドラッグ操作中にループや操作が呼び出されると、ドラッグ操作がブロックされます。

QPoint QDrag::hotSpot() const

カーソルの左上隅からの相対的なホットスポットの位置を返します。

setHotSpot()も参照してください

QMimeData *QDrag::mimeData() const

ドラッグオブジェクトがカプセル化しているMIMEデータを返します。

setMimeData() も参照して ください。

QPixmap QDrag::pixmap() const

ドラッグ&ドロップ操作でデータを表現するために使用される pixmap を返します。

setPixmap() も参照して ください。

void QDrag::setDragCursor(const QPixmap &cursor, Qt::DropAction action)

action のドラッグcursor を設定します。 これにより、デフォルトのネイティブ・カーソルをオーバーライドできます。action のネイティブ・カーソルの使用に戻すには、cursor として nullQPixmap を渡します。

注意: IgnoreActionにドラッグカーソルを設定しても、すべてのプラットフォームで動作するとは限りません。X11とmacOSは動作確認済みです。Windowsはサポートしていません。

dragCursor()も参照してください

void QDrag::setHotSpot(const QPoint &hotspot)

使用する pixmap の左上隅からの相対的なホットスポットの位置をhotspot で指定した点に設定します。

注意:X11の場合、ホットスポットによってカーソルの真下にpixmapが表示されると、マウスの動きにpixmapが追いつかなくなることがあります。

hotSpot()も参照のこと

void QDrag::setMimeData(QMimeData *data)

指定されたMIMEdata に送信するデータを設定する。データの所有権はQDrag オブジェクトに移ります。

mimeData()も参照

void QDrag::setPixmap(const QPixmap &pixmap)

ドラッグ・アンド・ドロップ操作でデータを表現するために使用する pixmap としてpixmap を設定します。pixmap を設定できるのは、ドラッグを開始する前だけです。

pixmap() も参照して ください。

QObject *QDrag::source() const

ドラッグオブジェクトのソースを返します。これは、ドラッグ&ドロップ操作が発生したウィジェットです。

Qt::DropActions QDrag::supportedActions() const

このドラッグ操作で可能なドロップアクションのセットを返します。

exec() およびdefaultAction()も参照してください

QObject *QDrag::target() const

ドラッグ&ドロップ操作のターゲットを返します。これは、ドラッグオブジェクトがドロップされたウィジェットです。

[signal] void QDrag::targetChanged(QObject *newTarget)

このシグナルは、ドラッグ&ドロップ操作のターゲットが変更されたときに発行され、newTarget が新しいターゲットになります。

target() とactionChanged()も参照してください

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。