[Development] Moving itemmodels classes to QtCore
Stephen Kelly
stephen.kelly at kdab.com
Tue Nov 22 17:52:15 CET 2011
Hi there,
I propose to move the following files into QtCore (along with their
implementations, omitted for brevity):
* itemviews/qabstractproxymodel.h
* itemviews/qidentityproxymodel.h
* itemviews/qsortfilterproxymodel.h
* itemviews/qitemselectionmodel.h
There are other possible candidates to move (QStandardItemModel,
QStringListModel), but I wanted to start as small as possible. Any objection
to this won't center around those classes.
The descision to move them centers around these points:
* Are they useful classes?
* Is it useful to move them?
* Do they have a future or will they be replaced some time in Qt 5.x?
The rationale is that I want to be able to use QSortFilterProxyModel with QML
guis, and I want to be able to use QItemSelectionModel with QML guis without
depending on QtWidgets (which has no maintainer). Currently QML has no useful
way to represent a selection (highlight doesn't cut it. That's kind of close
to the currentIndex, but there's still no selection).
Alan keeps stating incorrectly that QItemSelectionModel is only relevant to
multiple selection, and that multiple selection is not a concern for QML
(niche usecase apparently...).
QItemSelectionModel is useful even without considering the multiple selection
use cases. It notifies when the selection changes (QML and C++ can listen), and
it allows the selection to be programmatically updated by C++ and by QML. Both
of these features are essential if eg, you want to restore selection on
application restart, or you want the content of one view to relate to the
selection (where that selection might be updated due to a user clicking an
item in a different view, or programmatically).
These are useful classes.
Because QtWidgets has a bit of an uncertain future (currently not maintained),
I don't like having these classes in there, because I wish to maintain them.
With out-of-step releases, QtWidgets might enter an unreleasable state due to
something unrelated, meaning the maintained classes would not be released.
These classes depend on nothing in QtWidgets, and can be used without the
QtWidgets views - They can be used in QML views. They only depend on QtCore.
Having to deploy and link to QtWidgets without concrete reasons to ("I need
widget stuff") is undesirable.
It is useful to move them to QtCore.
No one seems to have any concrete plans to replace the QAbstractItemModel
based model framework. QtQuick people have plans regarding representations of
lists, and consuming those new lists with table-like-views in QML, but have
apparently no intentions about representing trees with QML, so there is no
replacement for QAIM. If the QtQuick people put together new public API for
representing a model of a updating list, that would not be a replacement for
QAIM, but might be 'easier'.
A replacement API capable of being used for trees would end up just as 'hard'
as QAIM is if it is to support relevant usecases. The biggest cause of the
QAIM stuff being hard is the lack of beyond-entry-level documentation on how to
use it.
There is a good deal of implementations of the QAIM interface in the wild, and
they are not going to be ported overnight to a replacement API if such a thing
becomes available.
A replacement API would not work with hybrid applications of QtWidgets and
QML. Hybrid applications will remain for years.
These classes are relevant, have a future for the lifetime of Qt5 and are
maintained. It doesn't make sense to have them contained in a module for which
none of those things are certain.
The options are to move them into QtCore (preferred), or to create a new
module (not worth the overhead) which QtQuick and QtWidgets would depend on.
Thanks,
--
Stephen Kelly <stephen at kdab.com> | Software Engineer
KDAB (Deutschland) GmbH & Co.KG, a KDAB Group Company
www.kdab.com || Germany +49-30-521325470 || Sweden (HQ) +46-563-540090
KDAB - Qt Experts - Platform-Independent Software Solutions
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20111122/1a71d058/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3636 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/development/attachments/20111122/1a71d058/attachment.bin>
More information about the Development
mailing list