このページでは

QDrag Class

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)
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 と共にヒープ上で生成する必要があります。

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

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

注: X11では 、ホットスポットによってピクマップがカーソルの真下に表示される場合、ピクマップがマウスの動きに追従できなくなることがあります。

ソースおよびターゲットのウィジェットは、source() およびtarget() を使用して取得できます。これらの関数は、ドラッグ&ドロップ操作が同じウィジェットで開始および終了したかどうかを判断するために頻繁に使用され、それによって特別な動作を実装することが可能です。

QDrag は、ドラッグ&ドロップ操作そのもののみを扱います。ドラッグ操作がいつ開始されるか、また QDrag オブジェクトをどのように生成・使用するかは、開発者が決定する必要があります。 特定のウィジェットについては、ユーザーがマウスボタンを押したかどうかを判断するために `mousePressEvent()` を再実装したり、QDrag が必要かどうかを確認するために `mouseMoveEvent()` を再実装したりすることがよくあります。

「ドラッグ&ドロップ」、「QClipboard 」、「QMimeData 」、「ドラッグ可能なアイコンの例」、「ドラッグ可能なテキストの例」、および「ドロップサイトの例」も参照してください 。

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

[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

ドラッグ&ドロップ操作においてデータを表現するために使用されるピクマップを返します。

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

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

action のドラッグ用cursor を設定します。これにより、デフォルトのネイティブカーソルを上書きすることができます。action でネイティブカーソルを使用するように元に戻すには、cursor としてnullのQPixmap を指定してください。

注:IgnoreAction のドラッグカーソルの設定は、すべてのプラットフォームで動作するとは限りません。X11 および macOS では動作することが確認されています。Windows ではサポートされていません。

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

void QDrag::setHotSpot(const QPoint &hotspot)

hotspot で指定された位置まで、使用されているピクマップの左上隅を基準として、ホットスポットの位置を設定します。

注:X11 では、ホットスポットによってピクマップがカーソルの真下に表示される場合、ピクマップがマウスの動きに追従できなくなる可能性があります。

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

void QDrag::setMimeData(QMimeData *data)

指定されたMIMEdata に送信するデータを設定します。データの所有権は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

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

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

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

target() およびactionChanged()も参照してください 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.