Как получить виджет из ячейки QTableView?

есть таблица, где в ячейке комбобокс

image

как мне получить все значения из этого комбобокса?

так выводит только первое значение view.model().index(0, 1).data()

combobox - это https://doc.qt.io/qt-5/qsqlrelationaldelegate.html


Ответы (1 шт):

Автор решения: Alexander Chernin

Комбо из делегата можно получить следующим образом:

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)
    ...

То есть в вашем случае, вам надо получить соответствующую модель, затем просто запросить необходимые данные.

Если речь идет не о БД, то поступать нужно тем же образом, то есть получать данные, используя соответствующую модель данных.

→ Ссылка