Make the QItemSelectionModel::selection a property.

QML code like this should be possible:

 Text {
     text: selModel.selection.contains(modelIndex) ? "blue" : "yellow"
 }

If the selection is just a Q_INVOKABLE method, then all consumers need
to set up

 Connections {
    target: selModel
    selectionChanged: foo()
 }

That is obviously not the API we want (made more clear by the fact that
the signal is already perfectly named) because it is not declarative but
it can be.  So, make it declarative by making selection a property.

Change-Id: Id1a05ae9b91e45e6d462bea4272b8740571e9fc3
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
This commit is contained in:
Stephen Kelly 2015-02-25 12:58:23 +01:00 committed by Stephen Kelly
parent 38e64664a2
commit 196fde2ac7

View File

@ -146,6 +146,7 @@ class Q_CORE_EXPORT QItemSelectionModel : public QObject
Q_PROPERTY(QAbstractItemModel *model READ model WRITE setModel NOTIFY modelChanged)
Q_PROPERTY(bool hasSelection READ hasSelection NOTIFY selectionChanged STORED false DESIGNABLE false)
Q_PROPERTY(QModelIndex currentIndex READ currentIndex NOTIFY currentChanged STORED false DESIGNABLE false)
Q_PROPERTY(QItemSelection selection READ selection NOTIFY selectionChanged STORED false DESIGNABLE false)
Q_DECLARE_PRIVATE(QItemSelectionModel)
@ -186,7 +187,7 @@ public:
Q_INVOKABLE QModelIndexList selectedIndexes() const;
Q_INVOKABLE QModelIndexList selectedRows(int column = 0) const;
Q_INVOKABLE QModelIndexList selectedColumns(int row = 0) const;
Q_INVOKABLE const QItemSelection selection() const;
const QItemSelection selection() const;
// ### Qt 6: Merge these two as "QAbstractItemModel *model() const"
const QAbstractItemModel *model() const;