2013-04-01 36 views
0

兩個獨立的形式連接到同一模型。因爲我明白模型視圖是如何工作的,所有連接到模型的視圖都應該在模型中顯示數據。但這種情況並非如此。請參閱附件中的代碼。單個模型連接到多個對話框上的多個視圖,而不是更新

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_() 

回答

0

感謝ccc.larc回答我的問題。您基本上需要傳遞您希望使用的模型的相同實例。

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, model, 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.model) 
     self.ft.show() 


app = QApplication(sys.argv) 
form = Form_1() 
form.show() 
app.exec_() 
相關問題