Loki
Март 13, 2013 15:06:29
Доброго времени суток!
Ни как не могу разобраться как выделять отредактированный элемент в представлении.
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())
В представлении QTableView можно выделять только одну строку, QSqlTableModel - соответственно модель. При попытке получить индех после submit он становится невалидным, а я никак не могу найти правильное решение.
reclosedev
Март 13, 2013 17:46:53
Без запускаемого кода проверить сложно, но думаю подойдут такие варианты:
1) В коде используется только значение row(), почему бы не сохранить его до submit()? Если индекс нужен не только для self.view.selectRow(row), то можно создать новый индекс self.model.index(row, 0).
2) Попробовать QPersistentModelIndex.
Loki
Март 13, 2013 18:35:27
reclosedev, спасибо за ответ.
Извиняюсь за неточность в вопросе, после submit() происходит сортировка полей в моделе как раз по изменяемому значению и тут, как я думаю, два варианта получить индекс именно измененной строки:
1) выделять строку до сортировки, т.е. остановить сортировку по столбцу модели(я не нашел как это сделать в QSqlTableModel) установить выделение, а потом сортировать и надеется что после сортировки выделение останется
2) получить ссылку на item() и после сортировки получить по item() индекс(тоже не смог это реализовать)
есть третий вариант сделать запрос, найти строку с требуемым значением и какимто образом получить по этому значению индекс.
P.S. по поводу сохранения значения: после сортировки оно не актуально, а QPersistentModelIndex пробовал но почемуто получил невалид
Loki
Март 14, 2013 13:33:20
Вобщем решил, но мне не очень нравится само решение…
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
Мне кажется должен быть более очевидный способ получить индекс измененного значения