我在类的表视图中有一个Qsqltable(KL_browse)QsqlTable有一个选择栏,要编辑选定的记录,我调用另一个类中的表单(Test_win)
如何将表格视图中的选定记录以表单???传递给映射器
请参阅代码示例(测试和播放代码!)
类Test_win(QDialog,ui_test_win.Ui_test_win):
def init(self, state, index): 超级(Test_win,自我)。初始化() self.setupUi(self) 自我状态 = 状态 自我索引 = 索引
# 对生成的 UI
进行一些本地修改 self.naam_edt.setAlignment(Qt.AlignRight)
# 设置模型
self.model = QSqlTableModel(self)
self.model.setTable("KLANTEN")
self.model.select()
# 设置要查看的映射字段 self.mapper = QDataWidgetMapper(self) self.mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit) self.mapper.setModel(self.model)
self.mapper.addMapping(self.klnr_edt, 0)
self.mapper.addMapping(self.naam_edt, 1)
self.mapper.addMapping(self.straat_edt, 2)
self.mapper.addMapping(self.huisnr_edt, 3)
self.mapper.addMapping(self.gemeente_edt, 4)
# 连接和插槽
self.ok_button.clicked.connect(self.save_Record) self.pushButton.clicked.connect(self.prev_Record) # 在添加模式下
设置 如果状态 == 0: query = QSqlQuery(""SELECT MAX(KLANTNR) as KLANTNR 来自克兰滕"") query.next() if query.isValid(): Hklantnr = query.value(0)
还: 返回 无
self.klnr_edt.setText(str(Hklantnr + 1)) row = self.model.rowCount() self.model.insertRow(row) self.mapper.setCurrentIndex(row) self.naam_edt.setFocus() # 在编辑模式下设置 query = QSqlQuery(""SELECT * FROM KLANTEN WHERE KLANTNR = self.index "") query.next()
self.naam_edt.setFocus()
定义prev_Record(个体经营): self.mapper.toNext()
def save_Record(个体经营):
self.mapper.submit()
QDialog.done(self, True)
# Voor beeld van Browse door klantenbestand
第KL_browse类(QDialog, ui_kl_browse.Ui_kl_browse):
def __init__(self):
super(KL_browse, self).__init__()
# query = QSqlQuery()
# query.exec_("""SELECT * FROM klanten ORDER BY klantnaam""")
self.setupUi(self)
self.model = QSqlTableModel(self)
self.model.setTable("KLANTEN")
self.model.select()
self.tableView.setModel(self.model)
self.tableView.setSelectionMode(QTableView.SingleSelection)
self.tableView.setSelectionBehavior(QTableView.SelectRows)
# self.view.setColumnHidden(ID, True)
# index = self.tableView.model().index(0, 1)
# self.tableView.selectionModel().setCurrentIndex(index, QItemSelectionModel.NoUpdate)
self.tableView.horizontalHeader().setSectionsMovable(True)
self.tableView.horizontalHeader().setDragEnabled(True)
self.tableView.horizontalHeader().setDragDropMode(QAbstractItemView.InternalMove)
self.tableView.horizontalHeader().setSortIndicator(1,0)
self.tableView.selectRow(0)
self.tableView.selectColumn(1)
index = self.tableView.model().index(0, 1)
self.tableView.setCurrentIndex(index)
# Volgende code is om de actie op knoppen en dergelijke op te vangen self.add_button.点击.连接(self.add_record) 自我。Del_button.clicked.connect(self.del_record) self.ed_button.clicked.connect(self.edt_record)
def del_record(self):
index = self.tableView.currentIndex()
self.model.removeRow(index.row())
self.model.submitAll()
self.model.select()
index = self.tableView.model().index(0, 1)
self.tableView.setCurrentIndex(index)
def add_record(self):
self.test_win = Test_win(0) # 0 = add mode
self.test_win.exec_()
self.model.select()
index = self.tableView.model().index(0, 1)
self.tableView.setCurrentIndex(index)
def edt_record(self):
index = self.tableView.currentIndex()
self.test_win = Test_win(1, index) # 1 = Edit mode
self.test_win.exec_()
# self.model.select()
# self.tableView.activateWindow()
已建立的控件:
self.tableview.connect(self.tableview,SIGNAL('clicked(QModelIndex)'),
lambda x:self.mapper.setCurrentModelIndex(self.tableview.selectedIndexes()[0]))
def connects(self):
self.connect(self.controlButtons.topPushButton, SIGNAL("clicked()"),lambda:self.arrow('firstRecord'))
self.connect(self.controlButtons.lastPushButton, SIGNAL("clicked()"),lambda:self.arrow('lastRecord'))
self.connect(self.controlButtons.beforePushButton, SIGNAL("clicked()"),lambda:self.arrow('prevRecord'))
self.connect(self.controlButtons.nextPushButton, SIGNAL("clicked()"),lambda:self.arrow('nextRecord'))
self.connect(self.controlButtons.newPushButton, SIGNAL("clicked()"),self.newRecord)
self.connect(self.controlButtons.modifyPushButton, SIGNAL("clicked()"),self.modifyRecord)
self.connect(self.controlButtons.deletePushButton, SIGNAL("clicked()"),self.deleteRecord)
self.connect(self.controlButtons.savePushButton, SIGNAL("clicked()"),self.saveRecord)
self.connect(self.controlButtons.cancelPushButton, SIGNAL("clicked()"),self.cancelRecord)
def arrow(self, arrow):
if arrow=='firstRecord':self.mapper.toFirst()
elif arrow=='lastRecord':self.mapper.toLast()
elif arrow=='prevRecord':self.mapper.toPrevious()
elif arrow=='nextRecord':self.mapper.toNext()
self.tableSelectRow()
def tableSelectRow(self):
row = self.mapper.currentIndex()
if self.tableview:
self.tableview.selectRow(row)
def newRecord(self):
row = self.model.rowCount()
self.model.insertRow(row)
self.arrow('lastRecord')
def modifyRecord(self):pass
def deleteRecord(self):
if (QMessageBox.question(None,"Delete","Really Delete?",QMessageBox.Yes, QMessageBox.No)==QMessageBox.No):
return
row = self.mapper.currentIndex()
self.model.removeRow(row)
self.model.submitAll()
if row + 1 >= self.model.rowCount(): row-=1
self.mapper.setCurrentIndex(row)
self.tableSelectRow()
def saveRecord(self):
row = self.mapper.currentIndex()
self.mapper.submit()
self.mapper.setCurrentIndex(row)
self.tableSelectRow()
def cancelRecord(self):
self.mapper.revert()
self.tableSelectRow()