Python 通过QStardItemModel()存储和检索QTreeView()对象中项目/行的数据

Python 通过QStardItemModel()存储和检索QTreeView()对象中项目/行的数据,python,pyqt,pyqt5,qtreeview,qstandarditemmodel,Python,Pyqt,Pyqt5,Qtreeview,Qstandarditemmodel,我正在将数据从SQLite数据库填充到PyQt5树视图控件(QTreeView)中。 数据通过QStandarItemModel()写入 问题:我想记住每行的行id,而不显示它。 我曾经在查询中选择它,但隐藏了列。 但是,当从索引为0的列查询行_id时,这会失败,因为它不可见 我不知道a.)如何存储行id以便b.)稍后检索它。 我想循环选择的行,并使用相应的行id执行一些操作(例如批量删除、批量编辑、批量复制等) model.setData始终需要列索引。。。Qt.UserRole似乎无法检索数

我正在将数据从SQLite数据库填充到PyQt5树视图控件(QTreeView)中。 数据通过QStandarItemModel()写入

问题:我想记住每行的行id,而不显示它。 我曾经在查询中选择它,但隐藏了列。 但是,当从索引为0的列查询行_id时,这会失败,因为它不可见

我不知道a.)如何存储行id以便b.)稍后检索它。 我想循环选择的行,并使用相应的行id执行一些操作(例如批量删除、批量编辑、批量复制等)

model.setData始终需要列索引。。。Qt.UserRole似乎无法检索数据

代码:

#/usr/bin/env蟒蛇3
#-*-编码:utf-8-*-
导入系统
从PyQt5.QtGui导入*
从PyQt5.QtCore导入*
从PyQt5.QtGui导入*
从PyQt5.QtWidgets导入*
类应用程序(QWidget):
邮件范围=4
ID、发件人、主题、日期=范围(邮件范围)
定义初始化(自):
super()。\uuuu init\uuuuu()
self.left=10
self.top=10
自宽=640
自身高度=240
self.initUI()

self.dataView.setSelectionMode(QAbstractItemView.ExtendedSelection)#当您确定选择是按行进行的时,只需要获取行并在其上迭代,在本例中,使用set get the selected rows和itero on the columns

def on_pbOk_clicked(self):
    message: str = ""
    rows = set(ix.row() for ix in self.dataView.selectedIndexes())
    for row in rows:
        values_for_row = []
        for col in range(App.MAIL_RANGE):
            it = self.dataView.model().item(row, col)
            values_for_row.append(it.text())
        text = " ".join(values_for_row)
        self.create_dialog(text)
        message += "\n" + text
    print(message)

那就是。。。太完美了!非常感谢你!也许你在这里也有一个想法。。。
def on_pbOk_clicked(self):
    message: str = ""
    rows = set(ix.row() for ix in self.dataView.selectedIndexes())
    for row in rows:
        values_for_row = []
        for col in range(App.MAIL_RANGE):
            it = self.dataView.model().item(row, col)
            values_for_row.append(it.text())
        text = " ".join(values_for_row)
        self.create_dialog(text)
        message += "\n" + text
    print(message)