【发布时间】:2013-03-18 08:32:15
【问题描述】:
我有两个表单,其中两个视图连接到同一个 dataModel 类,但是当我更改一个表单上的数据时,另一个表单上的数据没有变化。
我正在尝试在几个不同的对话框/表单上获取一个组合框,以便在基础数据从另一个对话框/表单更改时得到更新。
这是我的代码:
class Model(QStringListModel):
def __init__(self, parent=None):
super(Model, self).__init__(parent)
data = QStringList()
data << "one" << "two" << "three" << "four" << "five"
self.setStringList(data)
class Form_2(QDialog):
def __init__(self, parent=None):
super(Form_2, self).__init__(parent)
self.model = Model()
self.combo = QListView()
self.combo.setModel(self.model)
layout = QVBoxLayout()
layout.addWidget(self.combo)
self.setLayout(layout)
class Form_1(QDialog):
def __init__(self, parent=None):
super(Form_1, self).__init__(parent)
self.model = Model()
self.listView = QListView()
self.listView.setModel(self.model)
self.combo = QComboBox()
self.combo.setModel(self.model)
self.form2_button = QPushButton("Open Form_2")
layout = QVBoxLayout()
layout.addWidget(self.listView)
layout.addWidget(self.combo)
layout.addWidget(self.form2_button)
self.setLayout(layout)
self.connect(self.form2_button, SIGNAL("clicked()"), self.form_2)
def form_2(self):
self.ft = Form_2()
self.ft.show()
app = QApplication(sys.argv)
form = Form_1()
form.show()
app.exec_()
【问题讨论】:
-
基于同一模型的不同视图在任何视图修改模型数据时应该显示相同的值,您可能错误地使用模型/视图框架,请发布您的代码的简化版本帮助确定您的问题所在。
-
QStandardItemModel已经有一个名为setData的方法。您的setData方法可能会导致某种冲突。要获得进一步的帮助,您还应该发布您实际使用模型和视图的代码部分。由于您正在使用数据库,请考虑改用QSqlQueryModel或QSqlTableModel。 -
我知道 setData 没有正确实现,但我这样做只是因为我尝试没有它,模型被填充,但我无法重新填充它。而且我还尝试了其他几个模型,例如 QAbstractTableModel、QSqlTableModel QSqlQueryModel,我直接在两种表单上都尝试了它们,而不是通过创建我自己的类.. 获取初始数据一切正常,但我现在可以刷新组合以获得新数据。我在这里不知所措..任何帮助将不胜感激。
-
您认为您可以构建一个有效的简单示例吗?这个想法是 2 个独立的形式,使用相同的模型,并且当模型只被一个改变时,两者都得到模型的变化。
-
模型是否有可能只更新同一个实例的视图而不更新另一个实例的视图?我在帖子底部添加了我尝试过的内容,请看上方。
标签: python model-view-controller model pyqt qcombobox