2012-03-05 3 views
1

나는 (QSortFilterProxyModel을 통해) QAbstractTableModel의 하위 클래스에 QTreeView (databaseTreeView)가 포함 된 창을 가지고 있습니다. ui->databaseTreeView->model()->insertRow(ui->databaseTreeView->model()->rowCount());을 호출하는 [추가] 버튼이 있습니다. ui->databaseTreeView->selectionModel()->currentIndex();을 사용하여 편집기 창에 색인을 전달하는 [편집] 단추가 있습니다.Qt4의 모델에 항목을 추가하고 새로 추가 된 항목의 색인을 얻는 방법

[추가] 버튼을 사용하여 새로 만든 항목의 색인이있는 편집기가 자동으로 열리길 원하지만 모델이 정렬되면 행을 삽입 한 행 번호를 사용할 수 없습니다. Plus insertRows()은 bool 만 반환합니다 (내 상황에 대한 색인이 훨씬 더 편리 할 수 ​​있으므로 새로 추가 된 항목의 색인을 얻는 방법을 누군가에게 알려줄 수 있는지 궁금합니다).

대체 방법이 없다면 리팩터링에 2 ~ 3 시간을 바칠 의향이 있지만 상당히 간단하다고 생각했을 것입니다. 나는 호의적으로 QAbstractItemModel::rowsInserted 시그널을보고있다. 그러나 그냥 insertRows()에 주어진 줄을 반환하고 방금 추가 된 항목인지 여부에 관계없이 목록의 마지막 항목을 편집한다.

자세한 정보는 https://github.com/megamasha/FlashKard에서 확인할 수 있습니다.

답변

0

글쎄, 내가가 관리 보인다 내 자신의 질문에 대답 - 내 자신의 신호를 모델 클래스에 추가하고 addRows() 함수에서 보냈습니다. 그런 다음 해당 창에있는 슬롯에 연결하여 자식으로 편집기를 만들 수 있습니다.

나는 아직도 같은 목표를 달성하기 위해 기존 슬롯을 사용할 수 있어야한다고 생각하는 제안을 듣는 데 관심이 있습니다.

mapToSource() 사용 될 수 있는지 볼 것이다 ... 견적에 대한

0

http://doc.qt.nokia.com/4.7/qsortfilterproxymodel.html#detailsQSortFilterProxyModel 원래 모델 래퍼로서 작용한다. "당신이 정렬/필터링 된 모델 인덱스 또는 그 반대로 소스 QModelIndexes을 변환해야하는 경우, mapToSource(), mapFromSource(), mapSelectionToSource() 및 mapSelectionFromSource()를 사용합니다.는"

+0

감사하지만, 다른 하나의 인덱스로 변환의 문제가 아니다 - 그것은 처음부터 인덱스를 가지고 있지의 문제이다. 어쨌든 해결책을 찾았습니다. 나는 addRows() 함수에서 보낸 신호를 구현하여 그것을 슬롯에 연결했다.이 슬롯은 편집을 위해 그 카드를 연다. –