Russian Qt Forum

Qt => Qt Quick => Тема начата: Qyrychen от Январь 21, 2016, 13:06



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

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


Название: Re: переход с виджетов на QML
Отправлено: gil9red от Январь 21, 2016, 13:14
Можно же модель хранить и фильтровать в с++, а отображать в QML

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


Название: Re: переход с виджетов на QML
Отправлено: Qyrychen от Январь 21, 2016, 14:02
Можно же модель хранить и фильтровать в с++, а отображать в QML

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

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

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


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

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

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


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

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

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

Спасибо! А можно чуть побольше подробностей относительно предложенного вами метода? За счет каких методов делать подсветку?


Название: Re: переход с виджетов на QML
Отправлено: navrocky от Январь 23, 2016, 22:53
Ну как-то так подсветку делать:

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


Название: Re: переход с виджетов на QML
Отправлено: Qyrychen от Январь 25, 2016, 10:33
Ну как-то так подсветку делать:

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

Спасибо за ваш ответ! Да, был вариант подсвечивать html тегами цвета, но этот вариант некорректно  отрабатывает при наличии в тексте других тегов...