ウィジェットのドラッグはそれほど簡単ではありません。自分でやらなければならないコーディングがたくさんあります。
Qtドキュメントから:
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton
&& iconLabel->geometry().contains(event->pos())) {
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
mimeData->setText(commentEdit->toPlainText());
drag->setMimeData(mimeData);
drag->setPixmap(iconPixmap);
Qt::DropAction dropAction = drag->exec();
...
}
}
つまり、ウィジェットがドラッグするメッセージを受け取った場合 (マウスを押した場合など)、ウィジェットは QDrag オブジェクトを作成する必要があります。
QDrag オブジェクトでは、ドラッグされたウィジェットを表すピックスマップを設定できます。この時点でウィジェットを非表示にすると、マウス ポインターがウィジェットを「取った」ように見えます。
さらに、QMimeData オブジェクトが必要です。これには、ウィジェットを説明するあらゆる種類のデータを入れることができます。ユースケースでは、ウィジェットを識別できるもの。なぜなら、ここに難しい部分があるからです:あなたは自分で動かさなければなりません.
グリッドの親であるウィジェットは、ドロップ イベントを受け取り、MIME データから読み取ります。このウィジェットは、移動したいと考えています。QDropEvent から、ウィジェットが移動されるポイントを取得します。コード化する必要があるのは、グリッド レイアウトでの実際の再配置です。xml を更新することを忘れないでください。