我是否可以使用自动方法将QVariantMap的内容设置为QTreeView,或者我必须为此定义模型?
提前致谢
答案 0 :(得分:0)
请原谅我必须在python(PyQt4)中提供我的示例。有两种方法可以解决您的解决方案。您可以将QVariantMap数据推送到与您独立管理的视图相连的模型中,或者,您必须定义自己的模型,该模型将QVariantModel包装为数据源以主动驱动数据。
我提供了一个将数据推送到标准模型的简单示例。 python中没有QVariantMap,所以我使用的是key int's =>的字典。 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,并附加行。
我希望这个例子很容易转化为你的情况。