2013-04-01 1 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_() 
관련 문제