Проблема с ComboBox
Здравствуйте! Столкнулся со следующей проблемой. Есть кастомная таблица из ListView, в делегате которого содержится ComboBox. ComboBox заполняется изменяемой моделью данных, которая является результатом sql запроса. Так же ComboBox имеет свойство editable: true и значение editText отправляется в sql запрос для фильтрации данных. Другими словами этот ComboBox является фильтром. Проблема в том, что если количество строк ListView (а соответственно и количество ComboBox'ов) > 1, то изменение модели в одном ComboBox'е приводит к изменению модели в другом и значение editText в ранее использованном ComboBox'е меняется. Вопрос следующий: как убрать привязку editText к модели или как клонировать существующую модель, чтобы отвязаться от ее будущих данных?
ListView { id: list ... model: inputkolopor.currentText delegate: component } Component { id: component Item { id: item0 ... Rectangle { id: rec03_02 ... ComboBox { id: combo_obRU property string id: "" ... editable: true textRole: 'podsh_obRU' delegate: ItemDelegate { width: combo_obRU.width text: combo_obRU.textRole ? (Array.isArray(combo_obRU.model) ? modelData[combo_obRU.textRole] : model[combo_obRU.textRole]) : modelData highlighted: combo_obRU.highlightedIndex === index } onCurrentTextChanged: { if(currentIndex==-1){ combo_obRU.id = "" } else { combo_obRU.id = model_podsh.getId(currentIndex) } } } Button { id: but_obRU ... onClicked: { stackView.obRU = combo_obRU.editText qmlFilterBearing() combo_obRU.model = model_podsh combo_obRU.popup.visible = true } } } } }
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
- Akiv Doros
- Nov. 12, 2024, 1:58 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:50points,
- Rating points-4
- molni99
- Oct. 26, 2024, 11:37 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
- molni99
- Oct. 26, 2024, 11:29 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:20points,
- Rating points-10
Добрый день.
Я правильно понимаю, что Вы использовали модель для фильтрации ту, что зарегистрирована через регистрацию Контекста? То есть через setContextProperty?
Спасибо за ответ! Да, модель передаю через
Нет. Это явно неправильное решение. К тому же, у вас может быть бесконечное число строк, а следовательно такое решение просто не подходит, не говоря уж о том, что оно неприемлемо для продакшена)))
Когда буду дома, посмотрю код и скину возможный вариант создания отдельных моделей.
Буду ждать с нетерпением )
В общем идея такая. Нужно написать класс, который будет отвечать за некоторую таблицу, как раз Ваша модель должна получиться.
Ой, извиняюсь... надо же перед engine.load(QUrl(QLatin1String("qrc:/main.qml")));
Не работает
Ну про StackView вообще ничего сказано изначально не было...
Спасибо за ответы, есть над чем подумать
По вашей предыдущей подсказке создал новый класс для получения модели данных, зарегистрировал его как тип данных QML и посредством Q_PROPERTY добавил свойство filter для фильтрации запроса.
Дайте подумать...
Да. Но нужно найти не одно значение... Как пример: мне нужно найти подшипник 6306 2RS. Я просто вбиваю 306, комбобокс раскрывает свой список всех с 306 (6306, 6306 2RS, 6306 RS, 6306 2RSN и т.п.). Я выбираю нужный мне и дело в шляпе. По идее надо через proxymodel как-то работать, но для меня пока это сложно.
Вот тут с gif наверное будет более понятно
Да, в принципе идея понятна.