Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xintrea от Март 25, 2009, 19:53



Название: Последовательность элементов, выдаваемая selectedIndexes()
Отправлено: xintrea от Март 25, 2009, 19:53
Здравствуйте!


Что-то я понять не могу одной вещи. Есть QListView, на экране он показывает последовательность записей

Запись 1
Запись 2
Запись 3
Запись 4


Если выделить мышкой все записи, получить selectedIndexes(), и распечатать последовательно что там в QModelIndexList находится, то получится совсем другая последовательность

Запись 4
Запись 1
Запись 2
Запись 3


Код такой

Код
C++ (Qt)
QListView  *recordview;
...
QModelIndexList itemsforcopy=recordview->selectionModel()->selectedIndexes();
 
for(int i=0; i<itemsforcopy.size(); ++i)
qDebug() << itemsforcopy.at(i).data();

Причём последовательность записей в selectedIndexes() как-то странно зависит от того, как выделять строки в QListView. Можно сверху вниз с зажатым Shift, можно снизу вверх с зажатым Shift, можно с Shift зажатым выбрать все записи, а потом зажатым Ctrl на любой строчке отменить а потом применить вывод - результат будет такой как написано выше.

А вот если выбирать изначально с зажатым Ctrl, в результате последовательность получим в порядке выбора элементов.

И такая ситуация очень нехорошая.


Дело в том, что если в интерфейсе есть копирование из одного QListView в другой, то при копировании нарушается последовательность записей. А нужно, чтобы последовательность записей сохранялась, т.е. если выбраны записи 1, 3, 4, то в конечный QListView они должны вставиться именно в последовательности 1, 3, 4, и не зависеть от того, как пользователь их выбирал.


Вопрос. Как получить список выбраных в QListView записей, в котором записи бы располагались (были отсортированы) в соответствии с тем как они видны на экране?


Название: Re: Последовательность элементов, выдаваемая selectedIndexes()
Отправлено: Kolobok от Март 25, 2009, 20:38
Я сам сортировал.


Название: Re: Последовательность элементов, выдаваемая selectedIndexes()
Отправлено: xintrea от Март 25, 2009, 21:15
Я сам сортировал.

Каким образом? Добавляли скрытые данные, содержащие индекс, а потом по нему сортировали? И заодно при любом изменении списка (вставка, удаление, перенос записи вверх-вниз) делали пересчет индексов?


Название: Re: Последовательность элементов, выдаваемая selectedIndexes()
Отправлено: Rcus от Март 26, 2009, 00:51
Цитировать
QModelIndexList QItemSelectionModel::selectedIndexes () const

Returns a list of all selected model item indexes. The list contains no duplicates, and is not sorted.
/*выделение мое*/
Поскольку QModelIndex реализует оператор < /** \ref qabstractitemmodel.h:77*/, то можно использовать qSort на QModelIndexList.


Название: Re: Последовательность элементов, выдаваемая selectedIndexes()
Отправлено: xintrea от Март 26, 2009, 01:46
Поскольку QModelIndex реализует оператор <, то можно использовать qSort на QModelIndexList.

Угу, попробую так.