Python 2.7 PyQT 4.7.6 Microsoft Windows XP [Version 5.1.2600] SIP version? It must be the one that comes with "PyQt-Py2.7-gpl-4.7.6-1.exe" One more remark, the example I posted earlier uses QSQLITE and the editor is broken for all cells (both existing and just inserted), while with QPSQL only new cells are affected. How strange... Cheers, Balazs
---------------------------------------- > From: [email protected] > To: [email protected] > Date: Fri, 26 Nov 2010 15:24:06 +0100 > Subject: Re: [PyQt] OnManualSubmit + insertRows: EditRole and DisplayRole = > QVariant.Invalid? > > On Friday 26 November 2010, 10:22:02 [email protected] wrote: > > 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. > > Although the issue is not related to your custom editor, since it > happens with the default item editors as well, it pretty much looks > like it's related to the QVariant issue I noticed yesterday. > > Please tell us your Qt/python/sip/PyQt and OS versions. > > Pete > > > 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 [email protected]. > > ## > > ## 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: [email protected] > > > To: [email protected] > > > 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 [email protected] 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 [email protected] > > > http://www.riverbankcomputing.com/mailman/listinfo/pyqt > > > > _______________________________________________ > > PyQt mailing list [email protected] > > http://www.riverbankcomputing.com/mailman/listinfo/pyqt > > > _______________________________________________ > PyQt mailing list [email protected] > http://www.riverbankcomputing.com/mailman/listinfo/pyqt > _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
