Форум сайта python.su
Доброго времени суток!
Ни как не могу разобраться как выделять отредактированный элемент в представлении.
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())
Офлайн
Без запускаемого кода проверить сложно, но думаю подойдут такие варианты:
1) В коде используется только значение row(), почему бы не сохранить его до submit()? Если индекс нужен не только для self.view.selectRow(row), то можно создать новый индекс self.model.index(row, 0).
2) Попробовать QPersistentModelIndex.
Офлайн
reclosedev, спасибо за ответ.
Извиняюсь за неточность в вопросе, после submit() происходит сортировка полей в моделе как раз по изменяемому значению и тут, как я думаю, два варианта получить индекс именно измененной строки:
1) выделять строку до сортировки, т.е. остановить сортировку по столбцу модели(я не нашел как это сделать в QSqlTableModel) установить выделение, а потом сортировать и надеется что после сортировки выделение останется
2) получить ссылку на item() и после сортировки получить по item() индекс(тоже не смог это реализовать)
есть третий вариант сделать запрос, найти строку с требуемым значением и какимто образом получить по этому значению индекс.
P.S. по поводу сохранения значения: после сортировки оно не актуально, а QPersistentModelIndex пробовал но почемуто получил невалид
Офлайн
Вобщем решил, но мне не очень нравится само решение…
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
Офлайн