Как получить виджет из ячейки QTableView?
есть таблица, где в ячейке комбобокс
как мне получить все значения из этого комбобокса?
так выводит только первое значение
view.model().index(0, 1).data()
combobox - это https://doc.qt.io/qt-5/qsqlrelationaldelegate.html
Ответы (1 шт):
Комбо из делегата можно получить следующим образом:
delegate = tableView.itemDelegate()
widget = delegate.createEditor(None, QStyleOptionViewItem(), tableView.model().index(0, 1))
if isinstance(widget, QComboBox):
combo = QComboBox(widget)
combo.items()
Но это неправильно по сути. Сам объект таблицы, делегат и так далее лишь средства отображения данных вашей модели, то есть данные надо брать именно оттуда.
Вот цитата и пример из документации:
QSqlTableModel can also be used to access a database programmatically, without binding it to a view. перевод: QSqlTableModel также может быть использован для доступа к БД программно, без привязки его к отображению.
# Создание модели.
model = QSqlTableModel()
# Установка соответствующей таблицы. В примере "employee", у вас что-то другое
model.setTable("employee")
# SQL-запрос SELECT, то есть получение всех записей из таблицы
# В частности каждый комбо ими и заполняется при отображении
model.select()
# Получение четвертой записи и значения поля "salary" (так в примере)
salary = model.record(4).value("salary").toInt()
# Либо все записи
for i in range(model.rowCount()):
rec = model.record(i)
...
То есть в вашем случае, вам надо получить соответствующую модель, затем просто запросить необходимые данные.
Если речь идет не о БД, то поступать нужно тем же образом, то есть получать данные, используя соответствующую модель данных.