2012-08-05 56 views
1

是否有一種自動方法可以用來將QVariantMap的內容設置爲QTreeView,或者我必須爲此定義一個模型?將QTreeView設置爲QVariantMap內容

在此先感謝

+0

你想讓你的地圖充當數據源,還是隻是一個臨時容器?您可以使用標準模型並將數據加載到其中...但是如果您想直接使用地圖,則必須將其包裝到模型中。 – jdi 2012-08-05 02:58:43

+0

我只是想將我的地圖中的數據顯示在樹形視圖中 – Ameen 2012-08-05 03:01:23

回答

0

請原諒的事實,我必須提供在python(PyQt4中)我的例子。有兩種方法可以解決您的問題。您可以將您的QVariantMap數據推送到與您的視圖相關的模型中,該模型可以獨立管理,或者您必須定義自己的模型,將QVariantModel作爲數據源來包裝以主動驅動數據。

我正在提供一個將數據推送到標準模型的簡單示例。在python中沒有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。然後我在視圖上設置模型。我創建了一個連接到填充插槽的按鈕。當這個插槽被調用時,我創建一個「QVariantMap」類型的對象來模擬你的數據容器。然後我遍歷該容器的內容,併爲每個單元格創建一個QStandardItem。我將該項目設置到特定列和行的模型中。在這個例子中,我只使用了第0列,並添加了行。

我希望這個例子很容易轉化爲你的情況。