实现自己的表模型比使用更多的工作QStandardItemModel(如@Andy推荐的那样),但它确实可以让你对你想做的事情有一个很好的控制,所以我会试着给你一个做什么的总结.我假设您了解Qt的文档和PyQt的类文档,并且可以查找您需要的任何类.(我想,如果你已经拥有了一个QTableView但是比留下更好的东西,我可能会过度解释.)
要获得可检查的状态:
QTableModel.
QSqlTableModel).rowCount,columnCount,data,和setData.
rowCount并且columnCount直接对应于您用于数据模型的内容.如果您基本上使用2D数组(或列表列表),它们可以像单行一样短.data事情变得有趣.项目模型存储了几个不同的字段(Qt调用角色),data返回的内容取决于要求的角色.请注意,我讨论了返回内容的数据类型,但总是需要将其包含在内QVariant.
Qt.DisplayRole是表格单元格中显示的任何文本.这是您的实际数据,是目前常见的情况(因此这是默认角色).Qt.CheckStateRole是一个布尔值.返回Qt.Checked将显示一个选中的复选框,Qt.Unchecked并将返回未选中的复选框.如果您想要包含的列是复选框,则只处理此角色.QVariant.setData是对称的data.您应该处理您处理的角色data:Qt.DisplayRole实际数据和Qt.CheckStateRole复选框.允许多个行和列以及单元格的选择.为此,您需要了解选择模型.简短版本是:
view.setSelectionMode( QAbstractItemView.ContiguousSelection.这将让您突出显示连续的单元格.您也可以突出显示任意单元格:请参阅QAbstractView.SelectionMode.view.selectionModel().selectedIndexes().您可以通过循环遍历这些for.要允许右键单击:
contextMenuEvent.QMenu并将其连接到您需要的任何插槽.如需更深入的了解,请阅读模型/视图的Qt指南(如果您还没有).绝对看看Qt项目视图示例.许多描述的都是在PyQt中以更少的代码(包括两个@Jesse提及)实现的,并且树模型示例延续到表但工作量少得多(如上所述,您需要实现的更少).