Как получить данные из скрытой колонки в QTreeView?
Привет, товарищи. Есть такая проблема. Отображаю древовидную структуру из БД в виджете QTreeView... При клике на элемент - лезу опять в БД и достаю детальную информацию по элементу.. Но. Отображается в дереве имя элемента, а в базу нужно смотреть по айдишнику. Решил вывести айдишник отдельным столбцом в дереве и скрыть его с глаз долой.. Но когда я делаю setColumnHidden, я не могу достучаться в колонку, которую скрыл.. Подозреваю, что косяк в том, что я определяю выделенный элемент во view, а надо в model... В общем, застрял немного..
index = self.ui.treeView.selectedIndexes()[0]
selected_name = index.model().itemFromIndex(index).text()
selectedIndexes()[0] - возвращает значение из первого столбца. Все работает
selectedIndexes()[1] - из второго столбца. Все работает до тех пор, пока я не скрываю столбец с помощью метода hideColumn().. Со скрытым выдает ошибку выхода за границы массива. Непонятно, я же просто отображение скрываю, а не удаляю данные в колонке...
Из описания selectedIndexes()
This convenience function returns a list of all selected and non-hidden item indexes in the view. The list contains no duplicates, and is not sorted. Ключевое здесь non-hidden item. Так что все работает как описано.
Я бы попробовал решить проблему хранения айдишника с помощью переопределения функции QVariant QAbstractItemModel::data(const QModelIndex & index, int role = Qt::DisplayRole) const и bool QAbstractItemModel::setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole).
В setDatа() Для role = Qt::DisplayRole передаем в value имя а для role = Qt::UserRole айдишник. Тогда при вызове data c index = self.ui.treeView.selectedIndexes()[0] и role = Qt::DisplayRole будем получать имя, а при role = Qt::UserRole айдишник. Как-то так.
"returns a list of all selected and non-hidden item indexes" - я как раз после прочтения этих строк в документации и создал этот топик )))))) Переопределение QAbstractItemModel - хитро.. Но неужели нет проще выхода... Я не думаю, что это такая уж экзотическая задача у меня...