ドラッグアンドドロップを再実装せずにアイテムをドロップしたときにツリーアイテムを展開する方法を見つけようとしています。私はトップレベルのaddItemとdropEventの記述をすべて展開してみました。 addItemのアプローチは機能しません(これは、addItemがネイティブドラッグアンドドロップの実装で使用されていないためだと思います)。dropEventは問題のホストを表示します。特にmimeDataが適切ではなく、ツリーに戻ってきます。私はQtを初めて使っているので、簡単なことが分からないかもしれません。QTreeWidgetアイテムをドラッグアンドドロップで展開する
その他の方法は歓迎します。
編集: @ G.Mによって提供される情報の作業。私はdropEventを上書きしようとしています。
void ScenarioTreeWidget::MyTreeWidget::dropEvent(QDropEvent *event)
{
QModelIndex modelIndex = this->indexAt(event->pos());
QTreeWidgetItem* item = this->itemAt(modelIndex.row(), modelIndex.column());
this->expandItem(item);
QWidget::dropEvent(event);
}
2つの問題、拡大しているアイテムは、インデックスがドラッグしたアイテムのためか、私が持っているかの指標であるためである場合には(知らないドラッグされている1、いない、それが上にドロップされるアイテムであります私のコードのバグ)。また、私はまだデフォルトのdropEventの動作を失っています(このコードでドラッグすると、すべてのアイテムはドラッグアンドドロップ前の場所にとどまります)。
はあなたを行いますあなたがドラッグしながら拡大を意味する? – peppe
いいえ、AをBにドラッグすると、Bが展開してAがその内部に配置されていることがわかります。 – James
'dropEvent'に関するあなたのコメントを理解しているかどうか分かりません。 'QDropEvent :: pos'はあなたにドロップの位置を与えます。これをマップして、 'QTreeView :: indexAt'の引数として使用することができます。 'QModelIndex'を取得したら、展開/折りたたんだり、あなたが望むことを何でもすることができます。 –