2016-12-02 22 views
1

TreeViewの現在の行番号と親行番号をパラメータとするQ_INVOKABLE関数を呼び出す一部のonClicked()論理を含むQML TreeViewがあります。問題は、私が何かを選択した後、クリックして何かを展開または折りたたむことです。以前の値は引き続き取得されているため、アプリケーションがクラッシュすることがあります。私はonCollapsed()とアイテムを選択解除onExpanded()treeView.selection.clearCurrentIndex()treeView.selection.clearSelection()を呼び出そうとしましたが、何らかの理由で、まだ以前に選択した項目から値を渡しました。QML TreeViewは、折りたたみまたは展開をクリックしたときに前の選択を渡します。

//main.qml 

TreeView { 
    id: treeView 
    anchors.fill: parent 
    model: treeviewmodel 
    selection: ItemSelectionModel { 
     model: treeviewmodel 
    } 
    TableViewColumn { 
     role: "name_role" 
     title: "Section Name" 
    } 
    onCollapsed: { 
     treeView.selection.clearSelection() // deselects the item, but still passes the previous values 
    } 
    onExpanded: { 
     treeView.selection.clearSelection() 
    } 
    onClicked: { 
     console.log("Current Row: " + treeView.currentIndex.row + "Parent Row: " + treeView.currentIndex.parent.row) 
     //I need something here that will set treeView.currentIndex.row and treeView.currentIndex.parent.row to -1 
     //so that when I collapse or expand, -1 gets passed instead of the previous values 
    } 
} 
+0

「onClicked」イベントで-1を渡すために、ユーザーがツリーを展開または折りたたんだときに知っておくべき属性があるはずです。 – Tarod

+0

@Tarodあなたは属性をどういう意味ですか?あなたは精緻化できますか?ありがとう! –

+1

折りたたんだ後にQ_INVOKABLE関数に-1を渡す必要がある場合は、ツリーを展開または展開した後にフラグを使用してtrueに設定します。その後、 'onClicked'イベントが呼び出されたときには、フラグをチェックします。それが真であれば-1をQ_INVOKABLE関数に渡します。あるいは、' treeView.currentIndex.row'と 'treeView.currentIndex.parent.row'を使用します。 falseの場合はQML。必要に応じてフラグ値をfalseに変更します。たぶん私は問題を理解していないかもしれませんが、それは私が質問を読んだ後に考えた解決策です。 – Tarod

答えて

0

これを解決するには、いくつかのフラグを追加することができました(ヘルプに感謝@Tarod)。行の値を保存して、変更されているかどうかを確認する必要がありました。変更されていなければ、関数を呼び出さないので、古い値は渡されません。

TreeView { 
    id: treeView 
    anchors.fill: parent 
    model: treeviewmodel 
    property int currentRow: -1 
    property int parentRow: -1 
    property int lastCurrentRow: -1 
    property int lastParentRow: -1 
    selection: ItemSelectionModel { 
     model: treeviewmodel 
    } 
    TableViewColumn { 
     role: "name_role" 
     title: "Section Name" 
    } 
    onCollapsed: { 
     currentRow = -1 
     parentRow = -1 
    } 
    onExpanded: { 
     currentRow = -1 
     parentRow = -1 
    } 
    onClicked: { 
     console.log("Row: " + treeView.currentIndex.row + " Parent : " + treeView.currentIndex.parent.row) 
     //logic needed to not reselect last item when collpasing or expanding tree 
     if (lastCurrentRow === treeView.currentIndex.row && lastParentRow === treeView.currentIndex.parent.row) 
     { 
      currentRow = -1 
      parentRow = -1 
     } 
     else 
     { 
      lastCurrentRow = treeView.currentIndex.row 
      lastParentRow = treeView.currentIndex.parent.row 
      currentRow = treeView.currentIndex.row 
      parentRow = treeView.currentIndex.parent.row 
     } 
     if (currentRow === -1 && parentRow === -1) 
     { 
      //nothing selected - do nothing 
     } 
     else 
     { 
      //omitted some additional logic 
     } 
    } 
} 
関連する問題