[Kde-games-devel] A QListView programming problem
Albert Astals Cid
aacid at kde.org
Sun Oct 30 23:17:08 UTC 2011
A Dilluns, 31 d'octubre de 2011, Ian Wadham vàreu escriure:
> On 30/10/2011, at 10:02 PM, Albert Astals Cid wrote:
> > A Diumenge, 30 d'octubre de 2011, Ian Wadham vàreu escriure:
> >> Hi guys,
> >>
> >> In KSudoku the WelcomeScreen contains a list of puzzle types and
> >> sizes from which the user can select. I would like to be able to save
> >> and restore this selection between sessions, using KConfigGroup.
> >>
> >> I thought I could just save and restore an integer row-index, but no
> >> such luck. The list is displayed in a QListView, which is declared in
> >> code generated from a *.ui file created by Designer. In QListView the
> >> list is accessed by using QListView::selectionModel()->currentIndex()
> >> to obtain a QModelIndex object and then that index-object is used to
> >> retrieve a row from the underlying data collection. IOW there seems
> >> to be no easy way to find out where the cursor and highlighting are.
> >
> > Not sure i understand what your problem is, can't you just save the
> > row() of the QModelIndex returned by
> > QListView::selectionModel()->currentIndex() ?
> True, I believe you can do int modelIndex.row(), int modelIndex.column() and
> QModelIndex modelIndex..parent() to get the row, column and parent and in a
> QListView the column should be zero and the parent an empty object, so
> neither of those would need to be saved in the config file.
Right, only save the row, column and parent are always the same so don't need
them.
> I got lost on the return trip and pored over doco for half a day trying to
> work out how to put the model index, cursor, selection and highlighting
> back as they were. There is a QModelIndex QAbstractItemModel::index (int
> row, int column, QModelIndex & parent = QModelIndex()) function, but it is
> pure virtual and I could not find out if the chain of classes leading to
> QListView re-defines it. Then again, the doco utters dark words about not
> using index() and it being advisable to use createIndex() from somewhere
> else and I could not find out if QListView inherits a createIndex().
myListView->setCurrentIndex(myListView->model()->index(myRow, 0); should do
the trick, sometimes it does not because in Qt4 there is a separate concept
for selection and current index, but as far as I remember for listviews it is
actually mostly the same. If it does not work send me the code you have and
i'll give it a try myself.
Albert
>
> Finally I am not sure how to put the QModelIndex back in and change the
> view, i.e. what appears on the screen.
>
> I think you use QItemSelectionModel::setCurrentIndex() but how? What
> lower-level class or object inherits/implements that? And which of the many
> "command" options should I use? Maybe QItemSelectionModel::SelectCurrent.
>
> Another thing I could not find in the Qt 4.7.3 doco was an inheritance list
> or inheritance diagram. I tried backtracking from the list of All
> Functions, but just got back to where I came from in the doco.
>
> Cheers, Ian W..
>
> >> I do not think you can save an index-object in KConfigGroup. I
> >> googled
> >> about on this, but it seems that there is no easy answer for finding
> >> where the cursor and selection highlighting is in a QListView and then
> >> resetting that position on a later occasion.
> >>
> >> The best way seems to be to remember one or two attributes of the data
> >> and, when restoring, search the entire QListView data, find the item
> >> you
> >> want (e.g. by its attribute values) and set the selection there.
> >>
> >> Does anybody know a better way?
> >>
> >> All the best, Ian W.
> >>
> >> P.S. KSudoku's list is always displayed in the same order.
>
> _______________________________________________
> kde-games-devel mailing list
> kde-games-devel at kde.org
> https://mail.kde.org/mailman/listinfo/kde-games-devel
More information about the kde-games-devel
mailing list