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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Как получить номер записи в ListView?  (Прочитано 2223 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Май 06, 2019, 18:00 »

Есть ListView() с делегатами Rectangle, в каждом есть MouseArea в которой onDoubleClicked вызывает С++ метод в классе текущего связанного айтема модели. Тот посылает ссылку на себя редактору айтема и он открывается, айтем можно редактировать. Но возникла необходимость получить текущий номер айтема в списке, а не сам айтем. Как это сделать в ListView? Записывать в сами айтемы их номера нельзя - массив ссылок на айтемы сортируется с помощью std:sort(), сложная сортировка по нескольким полям, соответственно номера будут не актуальны. В принципе, можно после каждой сортировки заново прописывать порядковые номера в айтемы, но это грубо. Должна быть возможность получить номер айтема, который был даблкликнут в ListView. Но как? Получить координаты нажатия, и по ним вычислить номер айтема, зная вертикальный размер каждого? Или есть более простой способ?

Если
Код:
   ListView {
        id:lView
        model: SomeList
        
        MouseArea {
            anchors.fill: parent;
            onDoubleClicked: { SomeList.editItem( lView.currentIndex ); }
        }

это оно?
« Последнее редактирование: Май 06, 2019, 22:20 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #1 : Май 06, 2019, 22:20 »

Всё, нашёл сам.

Код:
            MouseArea {
                anchors.fill: parent;
                onDoubleClicked: { modelData.EditedIndex = index } // ни в коем случае не modelData.index
            }

Но есть традиционный для Qt глюк - если делать передачу числа через проперти и назвать её просто index, соответственно установку его setIndex(int),  то она будет вызываться, но будет всегда получать 0, а не настоящее число. Оставлю это, может кому-то ещё пригодиться.
Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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