Russian Qt Forum
Сентябрь 30, 2024, 14:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Последовательность элементов, выдаваемая selectedIndexes()  (Прочитано 4367 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Март 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 записей, в котором записи бы располагались (были отсортированы) в соответствии с тем как они видны на экране?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Kolobok
Гость
« Ответ #1 : Март 25, 2009, 20:38 »

Я сам сортировал.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Март 25, 2009, 21:15 »

Я сам сортировал.

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

Собираю информацию по крупицам
http://webhamster.ru
Rcus
Гость
« Ответ #3 : Март 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.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #4 : Март 26, 2009, 01:46 »

Поскольку QModelIndex реализует оператор <, то можно использовать qSort на QModelIndexList.

Угу, попробую так.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.125 секунд. Запросов: 22.