Найти - Пользователи
Полная версия: QTableView выделить элемент с определенным значением
Начало » GUI » QTableView выделить элемент с определенным значением
1
Loki
Доброго времени суток!
Ни как не могу разобраться как выделять отредактированный элемент в представлении.
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
Без запускаемого кода проверить сложно, но думаю подойдут такие варианты:
1) В коде используется только значение row(), почему бы не сохранить его до submit()? Если индекс нужен не только для self.view.selectRow(row), то можно создать новый индекс self.model.index(row, 0).
2) Попробовать QPersistentModelIndex.
Loki
reclosedev, спасибо за ответ.
Извиняюсь за неточность в вопросе, после submit() происходит сортировка полей в моделе как раз по изменяемому значению и тут, как я думаю, два варианта получить индекс именно измененной строки:
1) выделять строку до сортировки, т.е. остановить сортировку по столбцу модели(я не нашел как это сделать в QSqlTableModel) установить выделение, а потом сортировать и надеется что после сортировки выделение останется
2) получить ссылку на item() и после сортировки получить по item() индекс(тоже не смог это реализовать)
есть третий вариант сделать запрос, найти строку с требуемым значением и какимто образом получить по этому значению индекс.
P.S. по поводу сохранения значения: после сортировки оно не актуально, а QPersistentModelIndex пробовал но почемуто получил невалид
Loki
Вобщем решил, но мне не очень нравится само решение…
    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
Мне кажется должен быть более очевидный способ получить индекс измененного значения
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB