2016-12-02 15 views
1

TreeView의 현재 행 번호와 상위 행 번호를 매개 변수로 취하는 Q_INVOKABLE 함수를 호출하는 일부 onClicked() 논리를 포함하는 QML TreeView이 있습니다. 문제는 내가 무언가를 선택한 다음 클릭하여 펼치거나 붕괴시키는 것입니다. 이전 값이 계속 전달되어 응용 프로그램이 충돌하는 경우가 있습니다. 나는 treeView.selection.clearCurrentIndex()treeView.selection.clearSelection()onCollapsed()onExpanded()에 호출하려고 시도했지만 항목을 선택 취소하지만 어떤 이유로 인해 이전에 선택한 항목의 값이 계속 전달되었습니다.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 이벤트가 호출 될 때, 플래그를 체크한다 : true이면 Q_INVOKABLE 함수에 -1을 전달하고, 그렇지 않으면'treeView.currentIndex.row'와'treeView.currentIndex.parent.row'를 사용한다. 거짓이면 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 
     } 
    } 
}