Quoting Mark Summerfield <[EMAIL PROTECTED]>:

On 2008-10-08, Aaron Digulla wrote:
Scott Frankel schrieb:
> This seems beyond the scope of
> QSqlRelationalTableModel.

During my work on UPCScan, I've found that the QSqlRelationalTableModel
and the related table view are too buggy and too limited to be useful.
In the end, I've ripped all the code out again and wrote my own
implementation. Problems that I've encountered:

- When you change anything in the model, the view resets itself. You
lose the current selection and the current scroll position.

That is intended behaviour. Reset is the model's way of telling
its associated views that some major data change has occurred and that
all data shown must be refetched. So if you want to keep selection and
position info you must handle that yourself.

When I said "change anything in the model", I was referring to setData(), insertRows() and removeRows(). So as it is, the QSqlQueryModel is only useful for display of static tables.

It's an open bug in Qt 4.4. I found something about this in the Qt support forum.

If you've just changed a one or a few items then emit the dataChanged()
signal with the relevant QModelIndexes; that shouldn't affect seletions
etc. and the views will just refetch what has changed.

Please try it. It won't work as expected.

- You can't tell the model that you've just added a row to the table.

That's handled in your QAbstractTableModel subclass's insertRows()
reimplementation, where you call beginInsertRows(), then insert your row
or rows, then call endInsertRows().

That's not correct. QSqlQueryModel has its own idea what is in the table and there is no way to tell it "there is a new row in the table" without calling select() (which in turn resets the view).

- I have a column with binary data. There is no way to inject a mapper
to turn this into something useful for the UI.

- I couldn't update the binary data with in setData().

You'd need to implement a custom delegate. A custom delegate you
control over how data is displayed or over how it is edited or both.

Maybe but because I couldn't get the UI workflow right, I gave up when I ran into these issues and I didn't have an obvious solution. I saw it in your book but my solution is much more simple and obvious.

Regards,

--
Aaron "Optimizer" Digulla a.k.a. Philmann Dark
"It's not the universe that's limited, it's our imagination.
Follow me and I'll show you something beyond the limits."
http://www.pdark.de/

_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to