[PyQt] QSqlQueryModel write subclass
Linos
info at linos.es
Sat Oct 20 09:44:18 BST 2007
David thanks for your reply i get this to work yesterday, the problem was that i was not implementing
rowcount() so the new line was painted in the view but it did not have real index so data() and setdata()
could not use it, i am today working in a Qsqlquerymodel subclass with a buffer of rows to insert it all in a
final transaction if the model have dirty property true.
Best Regards,
Miguel Angel.
David Boddie escribió:
> On Wednesday 17 October 2007 12:14:52 +0200, Linos wrote:
>
>> I am goin crazy with this problem, i have tested with qsqltablemodel
>> subclassing and it works ok if a dont write the insertRows method in the
>> subclass:
>>
>> (model)
>> class SkudaSqlTableModel(QSqlTableModel):
>> def __init__(self, dbcursor=None):
>> super(SkudaSqlTableModel, self).__init__()
>>
>>
>> (QDialog)
>> def addRecord(self):
>> row = self.querymodel.rowCount()
>> self.querymodel.insertRow(row)
>>
>>
>> this works ok and gives me an new row with an '*' in the vertical header
>> and i can edit the line but if i do this:
>>
>> (model)
>> class SkudaSqlTableModel(QSqlTableModel):
>> def __init__(self, dbcursor=None):
>> super(SkudaSqlTableModel, self).__init__()
>>
>> def insertRows(self, position, rows=1 , index=QModelIndex()):
>> self.beginInsertRows(QModelIndex(), position, position + rows - 1)
>> self.endInsertRows()
>> return True
>
> Normally, when you reimplement insertRows() you would do something between
> calling beginInsertRows() and endInsertRows(). Not being familiar with the
> internals of QSqlTableModel, I'm not sure what should be done.
>
>> (QDialog)
>> def addRecord(self):
>> row = self.querymodel.rowCount()
>> self.querymodel.insertRow(row)
>>
>> i get a new line with the next number in the vertical header (not *) and i
>> cant edit the line. So i suppose i have any problem in my insertRows method
>> but i have read the QSqlTableModel source code insertRows method, i paste
>> here the strategy OnRowchange because is what i am using.
>
> OK, so do you basically want to fine-tune the behaviour of the table model
> or are you trying to achieve something else by subclassing QSqlTableModel?
>
> [...]
>
>> I cant find any other action to implement in my method apart from
>> beginInsertRows and endInsertRows, i am not using the insertIndex number (i
>> use rowCount()), not clearEditBuffer() because i have no buffer to clear in
>> this test and primeInsert is a signal no connected to anything so i dont
>> emit it, anyway i have tried using exactly the same (all of them) in my
>> method with exactly the same problem, can anyone please open my closed mind
>> with this annoying problem?
>
> I suppose that the lines
>
> d->insertIndex = row;
> d->clearEditBuffer();
>
> may have some side effects, but it's difficult to see what those could be
> without more detailed study. Plus, there's nothing you can do to access
> the internals in such a way.
>
>> i will use qsqltablemodel subclass with
>> setQuery (inherited from QSqlQuery) to do joins and other stuff if i cant
>> fix this (but this is not recommended in documentation).
>
> I imagine that using setQuery() might interfere with the normal operation
> of the model if you're not careful.
>
> David
>
>
> _______________________________________________
> PyQt mailing list PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt
More information about the PyQt
mailing list