2016-08-31 23 views
0

ドラッグアンドドロップを再実装せずにアイテムをドロップしたときにツリーアイテムを展開する方法を見つけようとしています。私はトップレベルの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の動作を失っています(このコードでドラッグすると、すべてのアイテムはドラッグアンドドロップ前の場所にとどまります)。

+0

はあなたを行いますあなたがドラッグしながら拡大を意味する? – peppe

+0

いいえ、AをBにドラッグすると、Bが展開してAがその内部に配置されていることがわかります。 – James

+0

'dropEvent'に関するあなたのコメントを理解しているかどうか分かりません。 'QDropEvent :: pos'はあなたにドロップの位置を与えます。これをマップして、 'QTreeView :: indexAt'の引数として使用することができます。 'QModelIndex'を取得したら、展開/折りたたんだり、あなたが望むことを何でもすることができます。 –

答えて

1

あなたはQTreeWidget::itemAtQModelIndex行と列を渡しているが、何それ実際欲求は、ウィジェットの相対xとy COORDSです。

ご提供いただいた情報をもとに、私はあなたが(もう少し簡潔に)何かのような...

void ScenarioTreeWidget::MyTreeWidget::dropEvent (QDropEvent *event) 
{ 
    QModelIndex modelIndex = this->indexAt(event->pos()); 
    QTreeWidgetItem* item = this->itemAt(modelIndex); 
    this->expandItem(item); 
    QWidget::dropEvent(event); 
} 

かで必要なものだと思う...

void ScenarioTreeWidget::MyTreeWidget::dropEvent (QDropEvent *event) 
{ 
    QTreeWidgetItem* item = this->itemAt(event->pos()); 
    this->expandItem(item); 
    QWidget::dropEvent(event); 
} 
関連する問題