2012-03-28 2 views
0

내 사용자 지정 QListView에는 항목을 그리는 대리자가 있습니다. QLineEdit과 같은 일부 행 항목에 실시간 컨트롤을 추가하고 싶습니다. 항상 행에 나타나고 목록과 함께 자동으로 올바르게 스크롤됩니다.Qt : 사용자 지정 QListView 및 라이브 컨트롤

항목이 위젯이 아니기 때문에 컨트롤을 "항목"의 자식으로 지정할 수 없기 때문에 스크롤하면 컨트롤이 QListView 위젯의 고정 된 위치에 남습니다.

다른 방법이 있습니까? 그게 가능합니까?

답변

0

일반적으로 QEvent::EnterEditFocus 이벤트가 발생하면 위젯이 편집 위젯을 만들고 (위치 지정) 그 다음에 QEvent::LeaveEditFocus이 발생하고 데이터가 모델로 다시 전송 될 때 소멸됩니다. 그러면 델리게이트는 새 모델 데이터로 다시 칠해야합니다.

"라이브"컨트롤의 의미를 확장 할 수 있습니까?

편집 위젯을 왜 계속 열고 싶습니까? 이 작업을 수행하는 더 좋은 방법은 원하는 방식으로 일반보기 (즉, Qt::DisplayRole)를 그리는 대리자를 만드는 것입니다. 하위 클래스 뷰를 올바르게 작성한다고 가정하면 모델이 변경 될 때 대리자가 계속 업데이트되어야합니다.

Delegate Classes의 읽기 되세요 먼저 Model/View 프로그래밍 소개 부분을 참고하십시오. Spin Box Delegate ExamplePixelator Example은 아직 배우지 않은 채로 공부할 가치가 있습니다.

+0

내 listView의 각 행은 인스턴트 메신저의 행과 비슷합니다. 각 행은 연락처를 나타냅니다. 또한 버튼이 있습니다. QPushButton을 listviewRow에 넣을 수 없으므로 단추는 "손으로 그린"것입니다. 스크롤은 단순히 작동하지 않습니다. 일부 연락처 행에는 핀 입력과 같은 비밀번호가 필요하므로 버튼을 사용할 수 있습니다. 단추 중 하나 옆에 작은 편집 상자를 놓고 싶습니다. 사용자가 "두 번 클릭/클릭"하여 편집 상자를 나타나게하지 않으려합니다. 편집 상자가 끊임없이 있고 listView로 올바르게 스크롤되기를 원합니다. – JasonGenX

+0

QListView보다는 커스텀 QWidgets에 더 적합한 문제인 것처럼 들립니다. 또는 QTableView 또는 QAbstractItemView의 하위 클래스 일 수 있습니다. 아마도 –

+0

일 것입니다. 난 단지 "행마다 라이브 QWidgets을 호스팅 할 수있는 능력을 가진 전체"QListView를 개발할 시간이 없습니다. 현재 인프라로이 작업을 수행 할 수있는 방법이 있기를 희망했습니다. – JasonGenX