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 を持つヒープ上に構築する必要があります。
ドラッグ中にデータを表現するために 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()も参照してください 。
© 2025 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.