2015-01-06 5 views
2

GridLayout (또는 다른 QML 항목 컨테이너 일반적으로) 항목을 어떻게 재정렬 할 수 있습니까? 몇 가지 행과 열이 있고 자식 항목이 채워집니다. 몇 분 전까지 나는 단순히 순서를 항목의 children 목록 구성원에 운영 할 수 기대했다 : 나는 단순히QML GridLayout의 항목을 재정렬하려면 어떻게해야합니까?

function reorder() {children.unshift(children.pop());} 
( onClicked:에서) 호출 할 수 바라고있는 나는 UI에서 MouseArea 버튼이

(레이아웃의 마지막 항목 첫번째되기의 의도) 레이아웃 항목의 방법,하지만 오류 메시지가 생성하는 트리거 될 때 :

TypeError: Property 'pop' of object [object Object] is not a function 

을하고 어떤 경우에 나는주의 문서는 children가 말한다 읽기 전용.

쉬운 방법이 있나요? 합니다 (documentation 동적 객체 관리는 정말 창조와 자식 개체의 파괴보다 더 적용되지 않습니다.)

답변

3

당신은 rowcolumn 연결된 속성을 사용할 수 있습니다. 미치의 대답에 따라

+0

아 물론! 나는 단지 아이들을 반복하고 그 속성을 적절하게 업데이트 할 수 있습니다. 관찰 된 레이아웃은 어차피 실제 어린이 주문과 아무 관련이 없습니다 ... 나중에 시도해보고 효과가있는 경우이 대답을 수락합니다. 감사; 내가 방금 블린 딩하게 명백한 것을 지적 할 누군가가 필요한 그런 경우 중 하나 : ^) – timday

1

, 나는이 함께했다 :

몇 가지주의 사항이있다
function reorder() { 
    for (var i=0;i<children.length;i++) { 
     var index=columns*children[i].Layout.row + children[i].Layout.column; 
     var newIndex=(index+1)%(rows*columns); 
     children[i].Layout.row=Math.floor(newIndex/columns)%rows; 
     children[i].Layout.column=newIndex%columns; 
    } 
    } 

이 들어

  • 명시 적으로 포함에 Layout.rowLayout.column를 설정해야 작동합니다 항목이 이미 있습니다. GridLayout의 셀 할당에 의존하면 연결된 속성이 0으로 유지됩니다. 내가 처음에 documentation을 읽었을 때 GridLayout이 실제로이 값을 설정했다는 것을 암시하는 것으로 조금 놀랍습니다.
  • 또한 레이아웃에 명시 적으로 rowscolumns을 설정해야합니다 (레이아웃 배치 용도로 열을 설정하는 것만으로도 왼쪽에서 오른쪽으로 배치 할 수 있지만 행 속성은 -1 하위 항목이 추가되고 위 코드는 실패합니다.
  • 항목이 섞여서 QGridLayoutEngine::addItem: Cell (1, 1) already taken과 같은 콘솔 경고가 울립니다. 그래도 충분히 해가 될 것 같습니다.
  • 물론 위의 내용은 완전히 채워진 단일 셀 항목의 그리드를 처리 할 것으로 예상됩니다.