2016-09-15 5 views
2

後ろに一歩であり、選択モードがExtendedSelectionあります。ユーザーが選択した索引を変更するたびに、どのツリー行が選択されているかを正確に知る必要があります。ここにTreeViewがあります:selectedRows()は私はQMLでツリービューを有する

上記の例では、選択した行をコンソールに印刷して、正しい選択があることを確認しています。 currentIndexは常に(予想通り)最後に選択されたインデックスを保持しているが、現在選択されているすべての行を保持することになっているselection.selectedRows()は、常に背後にある一歩です。例えば:

ユーザ(Ctrlキーを押しながら)を選択した場合、行1, 2, 3selection.selectedRows()null, "1", "1,2"currentIndexあろう一つ一つはそれぞれ1, 2, 3あろう。これら2つを組み合わせることで、選択状態にあるすべての索引のリストを取得できます。 私が問題になるのは、ユーザーがCtrlキーを離して行番号4を選択した場合、selection.selectedRows()nullですが、"1,2,3"になります。 ユーザが(Ctrlを押しながら)行1,2,3,4を選択した場合と、ユーザが最初に行を選択して(Ctrlキーを押しながら)1,2,3の場合はCtrlを押して行4を選択する場合を区別することはできません。

私はまたmyTreeView.selection.selectedIndexesでテストが、それでも同じ動作しています。 私はTreeViewのバグのように見えますが、解決方法を教えてください。

ありがとうございました。

答えて

0

onCurrentIndexChangedの代わりにonSelectionChangedを使用してください。その信号を使用すると、選択した索引のリストを取得できます。

私はコード全体を知りませんが、Qtが提供するFile System Browserの例を使用すると、その違いを確認できます。その例では

、両方の信号がどのように機能するかを確認するには

ItemSelectionModel { 
    id: sel 
    model: fileSystemModel 
    onSelectionChanged: { 
     console.log("onSelectionChanged - selectedRows: " + selectedIndexes) 
    } 
    onCurrentIndexChanged: { 
     console.log("onCurrentIndexChanged - selectedRows: " + selectedIndexes) 
    } 
} 

によって

ItemSelectionModel { 
    id: sel 
    model: fileSystemModel 
} 

を交換してください。

関連する問題