Hi! This is about QSqlTableModel. I want to modify a field value before it
is written to database,so I connect the QSqlTableModel's beforeUpdate signal
to a class method in which it'll modify a field value.
But when I run this program under PyQt4 4.5.4,it crashed.then I run it under
PyQt4 4.4,it worked without any problem.
Below is the code.Run it and try to click the sumbit button after input
field value,and you will see the result mentioned above .
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtSql import *
import sys
def createConnection():
db=QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("test0.db")
db.open()
def createTable():
q=QSqlQuery()
q.exec_("create table if not exists t1 (f1 integer primary key,f2
integer)")
q.exec_("delete from t1")
q.exec_("insert into t1 values(1,0)")
q.exec_("insert into t1 values(2,3)")
q.exec_("commit")
class Model(QSqlTableModel):
def __init__(self,parent):
QSqlTableModel.__init__(self,parent)
self.setTable("t1")
self.select()
self.setEditStrategy(QSqlTableModel.OnManualSubmit)
self.connect(self,SIGNAL("beforeUpdate(int,QSqlRecord&)"),self.beforeUpdateToTable)
def beforeUpdateToTable(self,row,rec):
rec.setValue("f2",999)
class TestWidget(QWidget):
def __init__(self):
QWidget.__init__(self)
vbox=QVBoxLayout(self)
self.t=QTableView()
self.m=Model(self.t)
self.t.setModel(self.m)
self.b=QPushButton("submit")
vbox.addWidget(self.t)
vbox.addWidget(self.b)
self.connect(self.b,SIGNAL("clicked()"),self.m.submitAll)
def main():
a=QApplication(sys.argv)
createConnection()
createTable()
w=TestWidget()
w.show()
sys.exit(a.exec_())
if __name__=="__main__":
main()
_______________________________________________
PyQt mailing list [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt