2015-01-16 2 views
1

내 응용 프로그램에서는 두 가지보기 중 하나가 어셈블리 트리를 표시하는 QTreeView입니다. 어셈블리에는 자식으로 다른 어셈블리와 파트가있을 수 있습니다. 다른보기는 QTableView의 파트 목록입니다.QtreeView와 QTableView를 연결하는 Qt

내가하려고하는 것은 어셈블리 트리에서 파트가 선택되지 않았을 때 (부품에 하위가 없음) 부품이 tableview에서 강조 표시되기를 바랍니다.

이것은 내가 지금까지 가지고있는 것입니다 ... TreeView에 대한 클릭 핸들러에서 ItemModel을 얻은 다음 부품 번호를 얻습니다. 적절한 하나가 발견 될 때까지 부품의리스트를 단지 반복 기능을

QAbstractItemModel *model = asmview->model(); 
QString partno = model-> index(index.row(), 0, index.parent()).data(Qt::DisplayRole).toString(); 

bool hasch = model->hasChildren(index); 

if (hasch){ 
    qDebug() << "has children" ; 
} else { 
    qDebug() << "has no children" ; 

    // go find the partnumber in the other grid 
    int idx; 
    idx = partsview->getItemNoForPartNo(partno); 

다음 인덱스 반환 -1을 발견하지 않으면.

여기가 내가 붙어 있습니다. 아직 컴파일 오류없이 파트 테이블보기의 현재 색인/선택을 설정하는 방법을 찾지 못했습니다. 예를 들어 컴파일하지 마십시오.

if (idx >= 0){ 
    // partsview->setCurrentIndex(idx); 
    partsview->selectionModel()->setCurrentIndex(idx); 

어떻게해야합니까?

+0

'QItemSelectionModel :: select()'함수를 대신 사용해 보시겠습니까? 보기 항목을 선택/선택 취소합니다. – vahancho

+0

@vahancho 나는 그걸 다시 한 번 살펴볼 것입니다. 시도해 보았습니다. 그러나 QModelIndex를 정수로 생성하는 데 어려움을 겪고있었습니다. (Qt를 처음 사용한다고 말할 수 있습니까?) –

+0

임의의 정수로부터 모델 인덱스를 만들 수 없습니다. 행과 열 번호를 알고있는 경우에만 그렇게 할 수 있습니다. 이 경우 QAbstractItemModel :: index() 함수를 사용해야합니다. – vahancho

답변

0

OK - 나는 그것을 : 내가 뭐하고 있었로 내가 argumant 아닌 INT로 QModelIndex를 사용하는 경우 D

setCurrentIndex이 작업을 수행합니다.

아래 코드에서 QMoelIndex를 midx로 만듭니다.

if (!hasch) { 
    // go find the partnumber in the other grid 
    int idx = partsview->getItemNoForPartNo(partno); 
    QAbstractItemModel *itemmodel = partsview->model(); 

    if (idx >= 0) { 
     QModelIndex midx = itemmodel->index(idx, 0, QModelIndex()); 
     partsview->setCurrentIndex(midx); 
    } 
} 

제안 해 주셔서 감사합니다.

관련 문제