qtreeview 예제

단순 트리 모델 예제와 마찬가지로 TreeModel은 모델 인덱스를 가져 와서 해당 TreeItem을 찾고 부모 및 자식에 해당하는 모델 인덱스를 반환할 수 있어야 합니다. 각 항목은 적절한 행 번호가 주어지면 자식 항목을 반환할 수 있습니다. 예를 들어 위의 다이어그램에서 «A»로 표시된 항목은 행 = 0이 있는 루트 항목의 자식에 해당하며, «B» 항목은 행 = 1이 있는 «A» 항목의 자식이며 «C» 항목은 행 = 1이 있는 루트 항목의 자식입니다. 이 예제를 단순화하기 위해 모델에서 노출되는 데이터는 모델의 setupModelData() 함수에 의해 데이터 구조로 구성됩니다. 많은 실제 모델은 원시 데이터를 전혀 처리하지 않고 기존 데이터 구조 또는 라이브러리 API로 작업하기만 하면 됩니다. 이 예제에서는 모델의 치수를 변경할 수 있으므로 insertRows(), insertColumns(), removeRows() 및 removeColumns()를 구현해야 합니다. boost::variant에 대한 몇 마디, 나는 최근에 람다와 일반 방문자 클래스가 C ++14에서 어떻게 보일 수 있는지 보여 주었다, 불행하게도 나는 C ++ 11와 함께 작동합니다. 따라서 현재 모든 방문자 클래스는 C ++14까지 사용할 수없는 일반 버전을 사용하는 대신 피용 및 붙여 넣기 일 뿐입니다. 또한 부스트 1.58을 사용하면 람다(lambdas)를 방문자로 사용할 수 있지만 이 기능은 다시 C++14에 불과합니다. 예를 들어, 이것은 nameVisitor 클래스, imlpement 는 getName 메서드를 호출 하는 제네릭 호출 연산자: 이 예제에서는 다른 클래스 모델/뷰 프레임 워크와 함께 사용할 수 있는 간단한 항목 기반 트리 모델을 구현 하는 방법을 보여 주십니다.

트리 뷰의 각 항목에는 일반적으로 여러 데이터 열(이 예제의 제목 및 요약)이 포함되어 있으므로 각 항목에 이 정보를 저장하는 것은 자연스러운 것입니다. 간단히 하기 위해 QVariant 개체 목록을 사용하여 항목의 각 열에 대한 데이터를 저장합니다. Qt 설명서에는 Qt에 대한 트리 모델을 올바르게 구현하는 방법에 대한 지침에 사용했던 매우 좋은 예가 있습니다. 간단한 트리 모델 예제에서는 두 클래스, 트리에 대 한 TreeItem 및 나중에 QTreeView에서 트리를 연결 하기 위한 트리 모델을 구현 합니다. QTreeView는 첫 번째 열이 항상 트리를 포함하는 하나의 열을 더 가질 수 있습니다. 내 용도로는 다른 열이 쓸모없으므로 Qt의 예제에 대한 첫 번째 차이점입니다. 각 항목은 지정된 행의 각 열에 대한 데이터 조각을 보유하므로 동일한 TreeItem 개체에 매핑되는 많은 모델 인덱스가 있을 수 있습니다. 예를 들어 b로 표시되는 정보는 다음 코드를 사용하여 가져올 수 있습니다. 각 TreeItem은 트리 뷰의 항목 행에 대한 데이터를 보유하도록 설계되어 각 열에 표시된 데이터에 해당하는 값 목록을 포함합니다. 표시된 예제에서는 하위() 함수를 호출하여 루트 항목에서 두 개의 최상위 항목A와 B를 가져올 수 있으며, 이러한 각 항목은 항목 A에 대해서만 표시되지만 부모() 함수에서 루트 노드를 반환합니다. setupModelData() 함수를 사용하여 모델의 초기 데이터를 설정합니다. 이 함수는 텍스트 파일을 구문 분석하여 모델에서 사용할 텍스트 문자열을 추출하고 데이터와 전체 모델 구조를 모두 기록하는 항목 개체를 만듭니다.

당연히 이 함수는 이 모델과 매우 다른 방식으로 작동합니다. 해당 동작에 대한 다음 설명을 제공하고 자세한 내용은 예제 코드 자체에 판독기를 참조합니다. 멋진 예! 유일한 단점은 위의 코멘트에 언급 된 PySide와 PyQt4는 지금까지 조금 오래되었습니다.

Next Post:
Previous Post: