Thanks for the quick reply. Here is a small rewrite (extension) of "connection.py". If you comment out the line "m.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)" then it is all fine, otherwise the custom editor widget for "int" is not picked by the Q table. Any idea? Cheers, B. --- connection.py #!/bin/env python import os import sys ############################################################################ ## ## Copyright (C) 2004-2005 Trolltech AS. All rights reserved. ## ## This file is part of the example classes of the Qt Toolkit. ## ## This file may be used under the terms of the GNU General Public ## License version 2.0 as published by the Free Software Foundation ## and appearing in the file LICENSE.GPL included in the packaging of ## this file. Please review the following information to ensure GNU ## General Public Licensing requirements will be met: ## http://www.trolltech.com/products/qt/opensource.html ## ## If you are unsure which license is appropriate for your use, please ## review the following information: ## http://www.trolltech.com/products/qt/licensing.html or contact the ## sales department at sa...@trolltech.com. ## ## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ## ############################################################################ from PyQt4 import QtSql, QtGui, QtCore
def createConnection(): db = QtSql.QSqlDatabase.addDatabase("QSQLITE") db.setDatabaseName(":memory:") if not db.open(): QtGui.QMessageBox.critical(None, QtGui.qApp.tr("Cannot open database"), QtGui.qApp.tr("Unable to establish a database connection.\n" "This example needs SQLite support. Please read " "the Qt SQL driver documentation for information " "how to build it.\n\n" "Click Cancel to exit."), QtGui.QMessageBox.Cancel) return False query = QtSql.QSqlQuery() query.exec_("create table person(id int primary key, " "firstname varchar(20), lastname varchar(20))") query.exec_("insert into person values(101, 'Danny', 'Young')") query.exec_("insert into person values(102, 'Christine', 'Holand')") query.exec_("insert into person values(103, 'Lars', 'Gordon')") query.exec_("insert into person values(104, 'Roberto', 'Robitaille')") query.exec_("insert into person values(105, 'Maria', 'Papadopoulos')") query.exec_("create table offices (id int primary key," "imagefile int," "location varchar(20)," "country varchar(20)," "description varchar(100))"); query.exec_("insert into offices " "values(0, 0, 'Oslo', 'Norway'," "'Oslo is home to more than 500 000 citizens and has a " "lot to offer.It has been called \"The city with the big " "heart\" and this is a nickname we are happy to live up to.')") query.exec_("insert into offices " "values(1, 1, 'Brisbane', 'Australia'," "'Brisbane is the capital of Queensland, the Sunshine State, " "where it is beautiful one day, perfect the next. " "Brisbane is Australia''s 3rd largest city, being home " "to almost 2 million people.')") query.exec_("insert into offices " "values(2, 2, 'Redwood City', 'US'," "'You find Redwood City in the heart of the Bay Area " "just north of Silicon Valley. The largest nearby city is " "San Jose which is the third largest city in California " "and the 10th largest in the US.')") query.exec_("insert into offices " "values(3, 3, 'Berlin', 'Germany'," "'Berlin, the capital of Germany is dynamic, cosmopolitan " "and creative, allowing for every kind of lifestyle. " "East meets West in the metropolis at the heart of a " "changing Europe.')") query.exec_("insert into offices " "values(4, 4, 'Munich', 'Germany'," "'Several technology companies are represented in Munich, " "and the city is often called the \"Bavarian Silicon Valley\". " "The exciting city is also filled with culture, " "art and music. ')") query.exec_("insert into offices " "values(5, 5, 'Beijing', 'China'," "'Beijing as a capital city has more than 3000 years of " "history. Today the city counts 12 million citizens, and " "is the political, economic and cultural centre of China.')") query.exec_("create table images (locationid int, file varchar(20))") query.exec_("insert into images values(0, 'images/oslo.png')") query.exec_("insert into images values(1, 'images/brisbane.png')") query.exec_("insert into images values(2, 'images/redwood.png')") query.exec_("insert into images values(3, 'images/berlin.png')") query.exec_("insert into images values(4, 'images/munich.png')") query.exec_("insert into images values(5, 'images/beijing.png')") return True class Line_editor_creator(QtGui.QItemEditorCreatorBase): def createWidget(self, parent): return QtGui.QLineEdit(parent) class X(QtGui.QMainWindow): def __init__(self, parent = None): QtGui.QMainWindow.__init__(self, parent) line_editor_creator = Line_editor_creator() item_editor_factory = QtGui.QItemEditorFactory() item_editor_factory.registerEditor(QtCore.QVariant.Int, line_editor_creator) QtGui.QItemEditorFactory.setDefaultFactory(item_editor_factory) m = QtSql.QSqlTableModel() # # With "OnManualSubmit" the below "prints" show: # qlonglong # qlonglong # None # None # # With default "OnRowChange": # qlonglong # qlonglong # int # int # m.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit) m.setTable('offices') v = QtGui.QTableView() v.setModel(m) r = QtSql.QSqlRelationalDelegate(v) v.setItemDelegate(r) m.select() self.setCentralWidget(v) i = m.rowCount() m.insertRow(i) print(m.data(m.index(i - 1, 0), QtCore.Qt.DisplayRole).typeName()) print(m.data(m.index(i - 1, 0), QtCore.Qt.EditRole).typeName()) print(m.data(m.index(i, 0), QtCore.Qt.DisplayRole).typeName()) print(m.data(m.index(i, 0), QtCore.Qt.EditRole).typeName()) if __name__ == "__main__": a = QtGui.QApplication(sys.argv) createConnection() x = X() x.showMaximized() sys.exit(a.exec_()) ---------------------------------------- > From: h...@urpla.net > To: pyqt@riverbankcomputing.com > Date: Thu, 25 Nov 2010 21:08:36 +0100 > Subject: Re: [PyQt] OnManualSubmit + insertRows: EditRole and DisplayRole = > QVariant.Invalid? > > On Thursday 25 November 2010, 17:57:09 sbre...@hotmail.com wrote: > > Hello, > > > > With OnManualSubmit on QSqlTableModel using the insertRows function > > the cell roles for EditRole and DisplayRole is not set properly. > > Actually they seem to remain uninitialized and have the value > > QVariant.Invalid. This causes my table editors to behave stange (but > > only for new rows). > > > > With OnRowChange it is all fine. > > The usual "please provide a minimum runnable example" applies here too.. > > You may base it on examples/connection.py for database setup. > > Pete > _______________________________________________ > PyQt mailing list PyQt@riverbankcomputing.com > http://www.riverbankcomputing.com/mailman/listinfo/pyqt > _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt