2012-08-05 2 views
1

QVariantMap의 내용을 QTreeView로 설정하는 데 사용할 수있는 자동 방법이 있습니까? 아니면이 모델을 정의해야합니까?QTreeView를 QVariantMap 콘텐츠로 설정하십시오.

+0

지도를 데이터 소스로 사용 하시겠습니까, 아니면 임시 컨테이너로 사용 하시겠습니까? 표준 모델을 사용하고 데이터를로드 할 수는 있지만 직접 맵을 사용하려면 모델로 래핑해야합니다. – jdi

+0

내지도의 데이터를 트리보기에 표시하기 만하면됩니다. – Ameen

답변

0

내가 파이썬 (PyQt4) 내 예제를 제공해야한다는 사실을 용서하십시오 사전에

감사합니다. 솔루션에 접근하는 데는 두 가지 방법이 있습니다. 독립적으로 관리하는 뷰에 연결된 모델에 QVariantMap 데이터를 푸시하거나 QVariantModel을 데이터 소스로 사용하여 데이터를 적극적으로 드라이브하는 고유 한 모델을 정의해야합니다.

데이터를 표준 모델로 푸는 간단한 예제를 제공합니다. 파이썬에는 QVariantMap이 없기 때문에 키 int => QVariant 문자열 값의 사전을 사용하고 있습니다.

class View(QtGui.QWidget): 

    def __init__(self): 
     super(View,self).__init__() 

     self.layout = QtGui.QVBoxLayout(self) 
     self.table = QtGui.QTableView() 
     self.layout.addWidget(self.table) 

     self.button = QtGui.QPushButton("Update") 
     self.layout.addWidget(self.button) 

     # Using a normal QStandardItemModel and setting 
     # it on the table view. 
     self.model = QtGui.QStandardItemModel(self) 
     self.table.setModel(self.model) 

     self.button.clicked.connect(self.populate) 

    def populate(self): 
     # no QVariantMap in PyQt4. Creating a dictionary on the fly 
     # of int key => QVariant string... {0: QVariant('foo'), ...} 
     variantMap = {i:QtCore.QVariant('foo') for i in xrange(10)} 

     col = 0 
     row = 0 
     # loop over each element in your map, and add a QStandardItem 
     # at a specific row/column 
     for name, val in variantMap.iteritems(): 
      item = QtGui.QStandardItem(val.toString()) 
      self.model.setItem(row, col, item) 
      row += 1 

저는 QTableView 및 QStandardItemModel을 만듭니다. 그런 다음 뷰에 모델을 설정합니다. populate 슬롯에 연결하는 버튼을 만듭니다. 이 슬롯을 호출하면 데이터 컨테이너를 시뮬레이트하기 위해 "QVariantMap"유형의 객체를 즉시 작성합니다. 그런 다음 해당 컨테이너의 내용을 반복하고 각 셀에 QStandardItem을 만듭니다. 특정 열과 행의 모델에 항목을 설정합니다. 이 예제에서는 열 0을 추가하고 행을 추가합니다.

이 예제가 사용자 상황에 맞게 쉽게 변환되기를 바랍니다.

관련 문제