Форум сайта python.su
4
Доброго времени суток!
Ни как не могу разобраться как выделять отредактированный элемент в представлении.
def on_up(self): if self.view.selectedIndexes()==[]: return index_to_up = self.view.selectedIndexes()[0] record = self.model.record(index_to_up.row()) numb = record.value(NUMBER) if numb <= 1: return numb = numb - 1 self.model.setData(index_to_up, numb) self.model.submit() self.view.selectRow(index_to_up.row())
Офлайн
173
Без запускаемого кода проверить сложно, но думаю подойдут такие варианты:
1) В коде используется только значение row(), почему бы не сохранить его до submit()? Если индекс нужен не только для self.view.selectRow(row), то можно создать новый индекс self.model.index(row, 0).
2) Попробовать QPersistentModelIndex.
Офлайн
4
reclosedev, спасибо за ответ.
Извиняюсь за неточность в вопросе, после submit() происходит сортировка полей в моделе как раз по изменяемому значению и тут, как я думаю, два варианта получить индекс именно измененной строки:
1) выделять строку до сортировки, т.е. остановить сортировку по столбцу модели(я не нашел как это сделать в QSqlTableModel) установить выделение, а потом сортировать и надеется что после сортировки выделение останется
2) получить ссылку на item() и после сортировки получить по item() индекс(тоже не смог это реализовать)
есть третий вариант сделать запрос, найти строку с требуемым значением и какимто образом получить по этому значению индекс.
P.S. по поводу сохранения значения: после сортировки оно не актуально, а QPersistentModelIndex пробовал но почемуто получил невалид
Офлайн
4
Вобщем решил, но мне не очень нравится само решение…
def on_up(self): if self.view.selectedIndexes() == []: return index_to_up = self.view.selectedIndexes()[0] record = self.model.record(index_to_up.row()) id = record.value(ID) numb = record.value(NUMBER) if numb <= 1: return numb = numb - 1 self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit) self.model.setData(index_to_up, numb) self.model.submitAll() for i in range(index_to_up.row(), 0, -1): if self.model.record(i).value(ID) == id: self.view.selectRow(i) return
Офлайн