2012-02-20 13 views
0

私はXMLファイルからデータを読み込むQTreeWidgetを持っています。ある時点でXMLファイルが変更された場合(多くのユーザーがそのファイルに一度にアクセスすると思う)、QTreeWidgetはクリアと再読み込みで再生成されます。ユーザーがQTreeWidgetの一番上の部分以外にスクロールしていて、クリア後に再作成されると、デフォルトでトップに戻ります。PyQtのQTreeWidgetのスクロール値を記憶する

質問:QTreeWidgetの「スクロール値」を取得して、再ポピュレーション後に同じ値に戻ることはできますか?もしそうなら、どうですか?前もって感謝します!

答えて

5

質問しているように、実際の以前の値にスクロールすることはできますが、結果は常に同じサイズになりますか?これらの数字はあなたを正しい場所に連れて行くという意味で意味がありません。しかし、単に参考のために、あなたは、あなたの再増殖を行い、スクロールバーにアクセスし、その値を取らなければならないだろうし、再度その値をスクロール:

bar = treeWidget.verticalScrollBar() 
yScroll = bar.value() 
# repopulate here ... 
treeWidget.scrollContentsBy(0, yScroll) 

をしかし、より有用なアプローチがあるアイテムを見つけることであろう現在のビューまたは興味のあるものを表示してから、ツリーを再作成し、その実際のアイテムまでスクロールするようにツリーに指示します。それで、ツリー内のどこにアイテムが存在するかは問題になりません(データ構造が大幅に変更された場合)。

まずいくつかの基準によって現在の項目を保存します。そして、その項目を調べ、あなたがデータ値は、それがテキスト値または他のいくつかのカスタムデータ値であることをしたら、あなたのツリーを再作成することができます

item = treeWidget.currentItem() # one way 
item = treeWidget.itemAt(centerOfTree) # another way 

# either save the text value or whatever the custom 
# identifying value is of your item 
text = item.text() 

再び。

# this is assuming the item is both present, 
# and referencing it by its string value 
newItem = treeWidget.findItems(text)[0] 
treeWidget.scrollToItem(newItem) 

これは、実際のアイテムのタイプに合わせて変更できます。それらを再度見つけるためにアイテムに他のカスタム値を保存しているかもしれません。

+1

通常、データ構造は削除または追加すると1つのアイテムによって変更されるだけなので、スクロールバーの位置はあまり離れてはいけません。あなたは正しいパスで私を得ましたが、treeWidgetのscrollContentsByメソッドを使用しても機能しませんでした。しかし、スクロールバーを呼び出して、treeWidget.verticalScrollBar()を使用していたのは何でしたか?setSliderPosition(yScroll) – Cryptite

関連する問題