QTreeWidgetを継承したクラスでレイヤービューを作っていたんですが、ドラッグアンドドロップモードがInternalMoveであるとき、アイテムをドラッグアンドドロップで移動した後にレイヤーの順番変更を反映する処理を実現する方法がわからなくて苦戦しました。
QTreeWidgetクラスのソースコードを呼んでみるとQTreeWidget::dropEvent関数では一度選択されているアイテムを削除してから、ドロップした箇所の後ろに追加するような処理が入っていました。ということで最終的に下記のように仮想メンバ関数であるdropEventを再実装して、関数内でQTreeWidget::dropEventを最初にコールすることで実現できました。よく考えてみれば当たり前のことなんですけど。
void TreeWidgetSample::dropEvent( QDropEvent * drop_event )
{
this->QTreeWidget::dropEvent( drop_event );
/* any processing after item order changed */
}
やはりオープンソースのライブラリだと詰まったときにソースコードが見れるのがありがたいと感じます。