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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: переход с виджетов на QML  (Прочитано 5121 раз)
Qyrychen
Гость
« : Январь 21, 2016, 13:06 »

Добрый день.
Подскажите пожалуйста. Мы разрабатываем некий продукт. Он умеет заполнять модель данными и отображать их в виде таблицы (QTableView). Также реализована возможность фильтрации элементов таблицы (с использованием QSortFilterProxyModel). Кроме того есть возможность поиска с подсветкой найденного текста и переходом между найденными элементами (используем QSyntaxHighlighter). Количество элементов в модели более 70000.

Для расширения возможностей продукта мы хотим начать использовать QML.
При поиске решений для переноса нашего функционала на QML столкнулись со следующими проблемами:
1. Фильтрация элементов модели на стороне QML (при помощи добавления записей модели в группы внутри DelegateModel при изменении условия фильтрации) показала себя неэффективной со стороны производительности. Можно ли осуществлять фильтрование как-то иначе кроме как с использованием плюсовой QSOrtFilterProxyModel?
2. Есть ли в QML готовая позможность как-то подсвечивать совпадения поисковых выражений и перемещаться по ним?
Искали ответы в сети и среди примеров доступных в QtCreator, но ничего такого не обнаружили.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Январь 21, 2016, 13:14 »

Можно же модель хранить и фильтровать в с++, а отображать в QML

Пример: https://github.com/gil9red/ListFiles
в main.cpp передается ссылка/указатель на модель, и в qml просто вызываются слоты с++ класса
Записан

Qyrychen
Гость
« Ответ #2 : Январь 21, 2016, 14:02 »

Можно же модель хранить и фильтровать в с++, а отображать в QML

Пример: https://github.com/gil9red/ListFiles
в main.cpp передается ссылка/указатель на модель, и в qml просто вызываются слоты с++ класса

да, спасибо большое за ответ! этот момент известен. хотелось уточнить о возможности фильтровать прямо в QML при помощи скриптов например. Адекватной возможности получается нету?

Ну и остается открытым вопрос о подсветке совпадений с поисковым выражением(например если бы в представленном вами примере при вводе поискового запроса exe подсвечивались эти элементы во всех отфильтрованных элементах списка)
Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #3 : Январь 22, 2016, 15:54 »

да, спасибо большое за ответ! этот момент известен. хотелось уточнить о возможности фильтровать прямо в QML при помощи скриптов например. Адекватной возможности получается нету?
Нет такой возможности, только в связке с C++ кодом. В QML модели довольно примитивны, кроме как для Hello World'ов они ни для чего не годятся.

Ну и остается открытым вопрос о подсветке совпадений с поисковым выражением(например если бы в представленном вами примере при вводе поискового запроса exe подсвечивались эти элементы во всех отфильтрованных элементах списка)

Только ручками. В модели сделать функцию, которая выдаст значение с подсветкой совпадений.
Записан

Гугль в помощь
Qyrychen
Гость
« Ответ #4 : Январь 22, 2016, 17:56 »

да, спасибо большое за ответ! этот момент известен. хотелось уточнить о возможности фильтровать прямо в QML при помощи скриптов например. Адекватной возможности получается нету?
Нет такой возможности, только в связке с C++ кодом. В QML модели довольно примитивны, кроме как для Hello World'ов они ни для чего не годятся.

Ну и остается открытым вопрос о подсветке совпадений с поисковым выражением(например если бы в представленном вами примере при вводе поискового запроса exe подсвечивались эти элементы во всех отфильтрованных элементах списка)

Только ручками. В модели сделать функцию, которая выдаст значение с подсветкой совпадений.

Спасибо! А можно чуть побольше подробностей относительно предложенного вами метода? За счет каких методов делать подсветку?
« Последнее редактирование: Январь 22, 2016, 18:04 от Qyrychen » Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #5 : Январь 23, 2016, 22:53 »

Ну как-то так подсветку делать:

Код
C++ (Qt)
Text {
   text: "<b>Hello</b> <i>World!</i>"
}
Записан

Гугль в помощь
Qyrychen
Гость
« Ответ #6 : Январь 25, 2016, 10:33 »

Ну как-то так подсветку делать:

Код
C++ (Qt)
Text {
   text: "<b>Hello</b> <i>World!</i>"
}

Спасибо за ваш ответ! Да, был вариант подсвечивать html тегами цвета, но этот вариант некорректно  отрабатывает при наличии в тексте других тегов...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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