2016-08-21 2 views
2

StackView를 사용하는 응용 프로그램이 있으며이 스택 뷰에 많은 동적 생성 개체를 넣을 수 있으며 StackView에서 팝업 될 때이 개체를 파괴 할 방법이 필요합니다.QtQuick.Controls 2 StackView 및 destroyOnPop

tablesStack.push({item: view, destroyOnPop: true}) 

을하지만 컨트롤이 StackView에 적용되지 않습니다 : 내가 컨트롤 1 Stackview를 사용하는 경우, (이 this question에 표시된 것처럼) 그냥 destroyOnPop 속성을 사용하여 객체를 푸시 할 수 있습니다. 이 문제의 올바른 해결책은 무엇입니까?

나는 단 하나의 방법 만 알고있다 : 나는 그것을 팝 할 때 지연과 함께 object.destroy()를 호출하지만, 이런 식으로 kludge처럼 보인다. 중요한 경우 동적 생성 객체에 코드를 추가 할 수 있습니다.

답변

3

컨트롤 2 StackView은 단순한 소유권 의미를가집니다. StackView은 동적으로 인스턴스화 한 항목의 소유권을가집니다. 인스턴스를 만든 경우 인스턴스를 제어 할 수 있습니다. 즉, StackView을 파괴하려면 Component 또는 URL을 누르고 StackView 인스턴스를 만듭니다.

당신이 생성 된 인스턴스에 액세스해야하는 경우에는 단순히 반환 값을 처리 할 수 ​​

var view = stackView.push(component, {"foo": 1, "bar": 2}) 
view.doSomething() 
+0

그것은 파일, 감사에서 Qt.createComponent와 함께 작동,하지만 난 내 코드 때를 변경하는 방법을 이해하지 Qt.createQmlObject를 사용합니까? 내 테스트 코드는 https://gist.github.com/anonymous/372c58e7f53531bd6e51950d611e33a7 – aknew

+0

입니다. 호기심 때문에'Qt.createQmlObject()'를 사용하는 주된 이유는 무엇입니까? 그것은 하드 종속성을 피하기위한 좋은 트릭이지만 대부분의 경우 더 명백한 구성 요소는 외관상으로 낫다. Qt 5.8의 QtQuick Controls 2.1을 사용하면 다음과 같은 작업을 할 수 있습니다 :'Rectangle {StackView.onDeactivated : destroy()}'. 2.0에서는 상태 확인에 의지해야 할 것입니다 :'Rectangle {StackView.onStatusChanged : if (StackView.status === StackView.Inactive) destroy()}' – jpnurmi

+0

감사합니다. createQmlObject를 사용하는 이유는 매우 간단합니다. 동적 인 sqlite베이스의 테이블에 대한 동적 뷰를 만들었고 런타임에 테이블을 포함 할 필드를 알지 못합니다. 역사적으로 나는 종종 처음에는 테이블 구조체를 변경했으며, 일부 qml 변경을 잊지 않는 방법이었습니다. 내 코드에 관심이 있으시면 https://github.com/aknew/CoinsVariationBase https://github.com/aknew/CoinsVariationBase – aknew