2010-04-22 2 views
1

누구나 QAbstractTableModel에서 QWidget을 편집기로 사용하는 예가 있습니까?
편집 할 때 선택 목록이있는 QCombobox를 작성해야하는 열이 있습니다.QAbstractTableModel의 사용자 정의 편집기

QAbstractItemDelegate 및 사용자 지정 페인트 함수를 작성해야하지만 Qt :: EditRole에서 표준 QCombobox를 단순히 팝업하는 것이 과장된 것 같습니다.

주 - 콤보 상자 내용은 모든 행에서 동일하며 누군가가 셀을 클릭 할 때만 표시하면됩니다.

나는 이것이 간단해야한다는 것을 알고 있지만 작동시키지 못한다. QTableWidget 기반 테이블은 쉽지만 매우 큰 데이터 테이블의 경우 필요합니다.

답변

4

docs는 QAbstractItemDelegate와 사용자 정의 페인트 함수를 작성해야하지만 Qt :: EditRole에서 표준 QCombobox를 단순히 팝업하는 것은 과도한 것처럼 보입니다.

멀리 갈 필요는 없습니다. 한 가지 방법은 QStyledItemDelegate을 서브 클래스 화 한 다음 createEditor()을 재정 의하여 미리 채워진 콤보 상자를 반환하는 것입니다. 그것의 setEditorDatasetModelData 함수는 기본 Qt 값 유형을 사용하고 있다면 아마도 이미 충분할 것입니다.

다양한 모델에서 작동하는 더 일반적인 것이 필요한 경우 편집기를 올바른 유형과 연결하는 QItemEditorFactory을 만들 수 있습니다. 이것은 또한 사용자 정의 유형에서 잘 작동합니다.

보기의 EditTrigger로 표시 할 때,보기는 편집이 설정된 현재의 항목뿐만 아니라 options 매개 변수에 따라 호출 한 다음 콤보 상자의 크기를 할 수 delegate->createEditor(...)를 호출되고있는 셀에 특정 대리인을 얻을 것이다 이 모델의 대부분은 QStyledItemDelegate으로 처리해야하지만 모델에서 지정한 값으로 설정하십시오. 따라서보기가이를 처리하므로 직접 Qt::EditRole에 대해 걱정할 필요가 없습니다.

Spin Box Delegate Example

어쩌면 그것은 당신에게 주제에 훨씬 명확하게보기를 줄 것이다 :

+0

감사합니다. 실제로 델리게이트를 QAbstractTableModel의 Qt :: Editrole에 어떻게 연결합니까? –

+0

편집이 어떻게 호출되는지에 대한 답변이 업데이트되었습니다. –

+0

그게 전부지만 그게 작동하지 않았어요. 스핀 박스 예제를 발견했습니다 - 일단 "QStyledItemDelegate"를 주신 덕분에 –

1

당신이 시도하고 Qt를에서 다음 예를 살펴 있었나요!

희망이 조금 있습니다!

+0

고마워요 - 제가 의견을 게시 한 직후에 발견했습니다! –