Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » QTableView выделить элемент с определенным значением [RSS Feed]

#1 Март 13, 2013 15:06:29

Loki
Зарегистрирован: 2013-03-13
Сообщения: 28
Репутация: +  4  -
Профиль   Отправить e-mail  

QTableView выделить элемент с определенным значением

Доброго времени суток!
Ни как не могу разобраться как выделять отредактированный элемент в представлении.

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 он становится невалидным, а я никак не могу найти правильное решение.

Офлайн

#2 Март 13, 2013 17:46:53

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

QTableView выделить элемент с определенным значением

Без запускаемого кода проверить сложно, но думаю подойдут такие варианты:
1) В коде используется только значение row(), почему бы не сохранить его до submit()? Если индекс нужен не только для self.view.selectRow(row), то можно создать новый индекс self.model.index(row, 0).
2) Попробовать QPersistentModelIndex.

Офлайн

#3 Март 13, 2013 18:35:27

Loki
Зарегистрирован: 2013-03-13
Сообщения: 28
Репутация: +  4  -
Профиль   Отправить e-mail  

QTableView выделить элемент с определенным значением

reclosedev, спасибо за ответ.
Извиняюсь за неточность в вопросе, после submit() происходит сортировка полей в моделе как раз по изменяемому значению и тут, как я думаю, два варианта получить индекс именно измененной строки:
1) выделять строку до сортировки, т.е. остановить сортировку по столбцу модели(я не нашел как это сделать в QSqlTableModel) установить выделение, а потом сортировать и надеется что после сортировки выделение останется
2) получить ссылку на item() и после сортировки получить по item() индекс(тоже не смог это реализовать)
есть третий вариант сделать запрос, найти строку с требуемым значением и какимто образом получить по этому значению индекс.
P.S. по поводу сохранения значения: после сортировки оно не актуально, а QPersistentModelIndex пробовал но почемуто получил невалид

Офлайн

#4 Март 14, 2013 13:33:20

Loki
Зарегистрирован: 2013-03-13
Сообщения: 28
Репутация: +  4  -
Профиль   Отправить e-mail  

QTableView выделить элемент с определенным значением

Вобщем решил, но мне не очень нравится само решение…

    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
Мне кажется должен быть более очевидный способ получить индекс измененного значения

Офлайн

  • Начало
  • » GUI
  • » QTableView выделить элемент с определенным значением[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version