2016-10-11 8 views
0

sqlite 데이터베이스에서받은 열과 같은 QTreeView 항목과 배열 형식의 데이터를 연결하려고하므로 해당 데이터에 직접 액세스 할 수 있습니다. 그 항목에서. 예를 들어 항목을 마우스 오른쪽 단추로 클릭하고 처리, 플로팅 등과 같은 추가 조작을 위해 항목의 데이터를 반환 할 작업을 선택할 수 있습니다. 기본적으로 값 배열을 나타내는 QTreeView 항목을 갖기 위해 노력하고 있습니다.Qt : QTreeView 항목과 배열 연결

QStandardItem :: setData()는 QVariant를 받아들이지 않기 때문에 도움이되지 않는 것 같습니다. QTreeView 항목에 데이터 (배열)를 가리키는 포인터를 연결하고 연결하려고 시도 할 수는 있지만 포인터를 연결하는 데 시간을 할애해야하는지 잘 모르겠습니다. 나는 뷰와 모델로 할 수있는 것을보기 위해 Qt 문서를 확인했지만, 유망한 것을 발견 할 수 없었다.

나는 일종의 QTableView 응용 프로그램이 아닙니다. 하나의 QTreeView 항목으로 전체 배열을 표현하려고합니다. 나는이 문제에 대한 어떤 제안도 감사 할 것이다.

업데이트 : 답변은 컨테이너 유형에 따라 다를 수 있으므로 QVector과 같은 Qt 컨테이너로 작업 할 수 있다고 말씀 드리고 싶습니다.

+0

컨테이너를'Q_DECLARE_METATYPE'으로 등록해야합니다. 데이터 모델 (보기가 아님) 안에 QVariant로 저장하고 사용할 수 있습니다. 예 :'Q_DECLARE_METATYPE (QList ); ' –

+0

입력 해 주셔서 감사합니다. 나는 컨테이너로'QVector'를 사용할 계획 이었기 때문에 네이티브 Qt 타입이기 때문에 더 쉬울 것입니다. [Docs] (http://doc.qt.io/qt-5/qmetatype.html)는 또한'QVector'가 자동으로 등록되고'Q_DECLARE_METATYPE'을 필요로하지 않는다고 말합니다. 이제 내가 얻지 못하는 것은 QStandardItem :: setData()가'QVariant'를 허용하는 동안'QVector'를 어떻게 통과 할 수 있는가입니다. 나는 당신의 요점을 놓칠 수도 있습니다. 그렇다면 미안 해요. – Deniz

+0

http://doc.qt.io/qt-5/qvariant.html#fromValue –

답변

1

할 수있는 일이 두 가지 있습니다. QVariant는 QVariantList가 될 수도 있으므로 실제로 QVariant 객체의 목록을 만들고 QStandardItem :: setData를 사용하여 저장할 수 있습니다. 데이터를 설정할 때 QVariantList를 만들고 setData에 전달하면됩니다. 검색 할 때 QVariant를 가져온 다음 QVariant.toList()를 호출하여이를 반복 할 수있는 목록으로 변환합니다.

이 시점에서 QVariant 객체의 QList가 있으므로 개별 QVarient를 저장/검색중인 데이터 유형으로 변환해야합니다.

이 기술을 사용했을 때 나는 단순화를 위해 작은 클래스에서 QVariant/QVariantList 프로세싱을 래핑했습니다.

또한 QVector를 QVariant에 직접 저장할 수도 있습니다. 당신은 그것을 검색 할 QVector하고 "값"방법을 저장하기 위해 "setValue의"방법을 사용해야합니다 :

typedef QVector <int> IntVector; 
IntVector some_data; 
QVariant variant; 
variant.setValue (some_data); 

IntVector result = variant.value <IntVector>(); 

typedef입니다 코드 조금 정리에만 존재한다. 물론 QVector 선언을 직접 사용할 수 있습니다.

+0

내 이전 댓글을 수정했습니다. 이 솔루션을 제 코드에 적용 할 수있었습니다. 고맙습니다. – Deniz

관련 문제