我在一个类(KL_browse)中的tableview中有一个Qsqltable QsqlTable有一个选择栏并编辑所选的记录我在另一个类中调用一个表单(Test_win)
如何将Tableview中的选定记录以表格形式传递给映射器?
查看代码示例(测试和播放代码!)
class Test_win(QDialog,ui_test_win.Ui_test_win):
def init (self,state,index):super(Test_win,self) . init ()self.setupUi(self)self.state = state self.index = index
#对生成的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)
#connections&slots
self.ok_button.clicked.connect(self.save_Record)self.pushButton.clicked.connect(self.prev_Record)#在添加模式下设置
if state == 0:query = QSqlQuery(“”"SELECT MAX(KLANTNR) as KLANTNR FROM KLANTEN"“”)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()#在编辑模式查询中设置= QSqlQuery(“”"SELECT * FROM KLANTEN WHERE KLANTNR = self.index "“”)query.next()
self.naam_edt.setFocus()
def prev_Record(self):self.mapper.toNext()
def save_Record(self):
self.mapper.submit()
QDialog.done(self, True)
#Voor beeld van浏览门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代码是om de actie op knoppen en dergelijke op te vangen self.add_button.clicked.connect(self.add_record)self.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()
1 回答
这是一个既定的控制: