1

是否有一种自动方法可以用来将 QVariantMap 的内容设置为 QTreeView,或者我必须为此定义一个模型?

提前致谢

4

1 回答 1

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 列并附加行。

我希望这个例子很容易转化为你的情况。

于 2012-08-05T05:28:42.253 回答