2012-11-06 2 views
0

저는 이것이 Qt에 관한 질문이 아니라 프로그래밍의 부족성에 대한 질문입니다.유도 된 QTreeWidgetItem을 반환하십시오.

QTreeWidgetItem에서 클래스를 파생 시켰고 일부 부울 플래그를 추가했습니다. 나는 QTreeWidget를 초기화 할 때 나는 나중에 내가 전화 이러한 항목을 반환하려면 나중에 내가

(MyQTreeWidgetItem)_NewItem1->child(i) 

하지만

_NewItem1_1=MyQTreeWidgetItem(_NewItem1); 
_NewItem1_1->boleanvalue1=true; 

하여 일부 항목을 추가보다

_NewItem1=MyQTreeWidgetItem(_treewidget); 

에 의해 그 두 가지를 추가 이 과정은 새로 초기화 된 부울 플래그가있는 MyQTreeWidgetItem을 반환합니다.

이전에 초기화 한 실제 아이템을 다시 실행하려면 하위 함수를 재정의해야합니까?

+0

생성 된 요소를 위젯에 추가하고 위젯이 색인 i로 자녀를 얻도록 요청한 경우 이전에 넣은 동일한 개체를 가져옵니다. 자식은 콜렉션에 저장되며 보통 포인터 모음입니다. 캐스트가 잘못되었습니다. '(MyQTreeWidgetItem *) parent-> child (i)' – dowhilefor

답변

1

_NewItem1->child(i)MyQTreeWidgetItem의 기본 클래스 인 QTreeWidgetItem에 대한 포인터를 반환합니다. 캐스트는 안전하게 MyQTreeWidgetItem이며, 실제로는 QTreeWidgetItem 일 수 있습니다. 이는 런타임시 유형을 검사하는 C++의 dynamic_cast을 사용하여 수행됩니다. 한편

QTreeWidgetItem *item = _NewItem1->child(i); 
MyQTreeWidgetItem *myItem = dynamic_cast<MyQTreeWidgetItem>(item); 
if (myItem) { 
    qDebug() << myItem->boleanvalue1; 
} else { 
    qDebug() << item << "is not of type MyQTreeWidgetItem"; 
} 

는 타입 캐스트 운영자 () 전환이 종류 가능하다면, 어떠한 확인하지 않고 다른 유형의 임의의 타입을 변환 할 수있다. 예를 들어, 포인터를 QTreeWidget으로 변환하여 MyQTreeWidgetItem 유형의 객체로 변환했습니다. 변수에 대한 후속 액세스는 런타임 오류 또는 예기치 않은 결과를 생성합니다.

+0

답장을 보내 주셔서 감사합니다. 이제는 동적 캐스팅을 사용합니다. 하지만 여전히 내 물건에 대한 올바른 가치를 얻지 못합니다. 부울 값을 true로 초기화하지만 항목이 반환되면 값은 false입니다. – user1540939

+0

제공 한 코드에서 _NewItem1_1에 대해 boleanvalue1을 설정하고 동일 항목이 아닌 _NewItem1의 i 번째 자식을 확인하려고합니다. – divanov

관련 문제