PyQt模型/视图:程序性变化适合哪种模型?
我最近开始重写一个应用程序,想把它改成模型/视图的方式,这样可以减少一些乱七八糟的代码。
到目前为止,我成功地创建了一个只读模型,这个模型是从 QAbstractTableModel
继承而来的。这个模型大致是这样的:
class MyModel(QtCore.QAbstractTableModel):
def __init__(self, data, parent=None):
super(MyModel, self).__init__(parent)
self.data = data
data
是一个包含多个对象的列表。这些对象会在 data()
方法中被访问:
def data(self, index, role):
# much stuff omitted for clarity
return QtCore.QVariant(self.data[index.column()].id)
现在,如果我使用预定义的 data
元素,这样是没问题的。但实际上,data
是会根据程序的运行情况而变化的(当接收到某些信号时,它会扩展)。我该如何让模型知道这些变化,这样我的视图也能对这些变化做出反应呢?
我有在了解可读写模型,但它们允许用户编辑和更改内容,而在我的视图中,我希望这些内容是不可编辑的:简单来说,模型只需要在“幕后”进行更改,视图则要适应这些变化。
在这种情况下,最好的方法是什么?是实现一个可读写模型,使用 setData()
等方法,还是有更简单的解决方案呢?
2 个回答
1
我的logview应用程序使用了QAbstractTableModel
,它有一个动态的日志记录列表,这个列表会随着网络上接收到的记录不断增加。你可以下载源代码,看看LogRecordModel
,它是QAbstractTableModel
的一个子类,PropertySheetModel
也是。它们都是只读模型。
这个应用程序使用了Qt的模型/视图API,结构相对简单,所以你应该能把它的方法应用到自己的项目中。