5

QTreeWidget をサブクラス化し、dragDropModeInternalMoveに設定し、カスタム アイテムを設定しました。カスタム アイテムの一部はドラッグ可能で、他のアイテムはドロップを受け入れます。ユーザーは、期待どおりにツリー内でアイテムを移動できます。しかし、アイテムの順序の変更について通知を受け、適切に対応する必要があります。残念ながら、接続できるツリー内のアイテムの移動に関連する信号はありません。

QTreeWidget の基になるmodel()へのハンドルを取得してから、 rowsMo​​vedシグナルに接続しようとしましたが、内部移動中に放出されないようです。

QTreeWidget のdropEvent()を再実装しましたが、目的の行インデックスを特定する方法がありません。

dropMimeData ()イベントは、どうやら内部移動ではまったく呼び出されません。

私が試すことができる他のアプローチはありますか?ありがとう。

4

3 に答える 3

6

再実装dropEvent()された では、目的の行インデックスと項目を見つけることができるはずです。

void
subclass::dropEvent(QDropEvent* event)
{
  QModelIndex index = indexAt(event->pos());
  if (!index.isValid()) {  // just in case
    event->setDropAction(Qt::IgnoreAction);
    return;
  }
  QTreeWidgetItem* destination_item = itemFromIndex(index);
  ....
}
于 2013-07-17T21:09:02.283 に答える
3

OPは実際に内部移動について通知を受ける方法を尋ねました。つまり、QTreeWidgetをサブクラス化せずにそれを行う方法です(少なくとも、組み込み機能であるため、内部移動を使用する方法です)。QTreeWidget モデルのrowsInserted()シグナルに接続します。

connect(treeWidget->model(), SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(rowsInserted(const QModelIndex &, int, int)));
于 2014-05-10T13:18:31.770 に答える