DE
June 5, 2019, 1:48 a.m.

При выборе элеметна на ListView список пролистывается в конец.

Qt, QML, SQL

Приложение для работы с БД.
Для отображения части информации используется ScrollView{ListView{}}. В качастве делегата используется DelegateModel.

  1. DelegateModel{
  2. id: visualModel
  3. model: elemModel
  4. groups: [ DelegateModelGroup{ name: "selected" } ]
  5.  
  6. function itemsInSelected(){
  7. filterOnGroup = "selected";
  8. var cnt = count;
  9. filterOnGroup = "items";
  10. return cnt;
  11. }
  12.  
  13. delegate:
  14. Rectangle {
  15. id: listItem
  16. width: listViewId.width
  17. height: 50
  18.  
  19. color: (listItem.DelegateModel.inSelected) ?
  20. "#575757" : "#d3d3d3";
  21. Text {
  22. id: nameText
  23. font.pixelSize: 18
  24. text: "<b>" + NAME_c + "</b>"
  25. color: (listItem.DelegateModel.inSelected) ?
  26. "white" : "black"
  27. }
  28.  
  29. Text {
  30. anchors.left: nameText.left
  31. anchors.right: parent.right
  32. anchors.top: nameText.bottom
  33. text: "<i>" +
  34. dbHelper.getElementType(ELEMENT_TYPE_ID_c) +
  35. "</i>"
  36. color: (listItem.DelegateModel.inSelected) ?
  37. "white" : "black"
  38. }
  39. MouseArea{
  40. anchors.fill: parent
  41. onClicked:{
  42. if (mouse.button === Qt.LeftButton){
  43. if (mouse.modifiers & Qt.ControlModifier){
  44. listItem.DelegateModel.inSelected =
  45. !listItem.DelegateModel.inSelected;
  46.  
  47. }else{
  48. //I am ashamed for that :(
  49. visualModel.items.removeGroups(0,
  50. visualModel.items.count,
  51. ["selected"]);
  52. listItem.DelegateModel.inSelected = true;
  53. }
  54.  
  55. xTextInput.text = X_c;
  56. yTextInput.text = Y_c;
  57. zTextInput.text = Z_c;
  58. listViewId.curentElemId = ID_c;
  59.  
  60. }
  61. }
  62. }
  63.  
  64. }
  65.  
  66. }
  1. ScrollView{
  2. anchors.left: searchPanel.left
  3. anchors.right: searchPanel.right
  4. anchors.top: searchPanel.bottom
  5. anchors.topMargin: searchPanel.height * 0.1
  6. anchors.bottom: elemBtnsPanel.top
  7. anchors.bottomMargin: elemBtnsPanel.height * 0.1
  8.  
  9. ListView {
  10. id: listViewId
  11. visible: true
  12. focus: true
  13. currentIndex: -1
  14. clip: true;
  15. cacheBuffer: 100000
  16.  
  17. snapMode: ListView.SnapToItem
  18.  
  19. model: visualModel
  20. enabled: {return !isEditable}
  21.  
  22. anchors.fill: parent
  23.  
  24. property int curentElemId: 0;
  25. }
  26. }

В качестве модели выступает наследник от QSqlQueryModel.

Проблема, в том, что при выборе элеметна на ListView список пролистывается в конец.

2

Do you like it? Share on social networks!

2
Andrei Yankovich
  • June 5, 2019, 12:27 p.m.

Выполнять селект элементов на view это архитектурная ошибка.
Тебе нужно сделать метод select в своей модели (наследник от QSqlQueryModel), там будут выполнятся операции по выборке а также должно быть свойство отображающие какой элемент сейчас выделен.

Что касается перелистывания списка, то подазриваю что вы используете методы BeginResetModel and endResetModel, эти методы полностью перестраивают вьюшку а значит и сбивают скрол. Нужно использовать:

    DE
    • June 5, 2019, 12:55 p.m.
    • The answer was marked as a solution.

    Проблема была в смене фильтра в функции.

    1. function itemsInSelected(){
    2. filterOnGroup = "selected";
    3. var cnt = count;
    4. filterOnGroup = "items";
    5. return cnt;
    6. }

      Comments

      Only authorized users can post comments.
      Please, Log in or Sign up
      • Last comments
      • AK
        April 1, 2025, 11:41 a.m.
        Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
      • Evgenii Legotckoi
        March 9, 2025, 9:02 p.m.
        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
      • VP
        March 9, 2025, 4:14 p.m.
        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
      • ИМ
        Nov. 22, 2024, 9:51 p.m.
        Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
      • Evgenii Legotckoi
        Oct. 31, 2024, 11:37 p.m.
        Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup