QTreeView 总是显示相同的数据
Posted
技术标签:
【中文标题】QTreeView 总是显示相同的数据【英文标题】:QTreeView always displaying the same data 【发布时间】:2013-12-13 23:19:17 【问题描述】:我有一个项目树。是这样的:
Categorias (root)
- General
--- Computadoras
--- Tablets
- Insumos
--- Cartuchos
问题是QTreeView
总是使用相同的信息完成。我得到一个看起来像这样的树视图:
Categorias (root)
- General
--- General
--- Insumos
- Insumos
--- General
我在index()
方法中放置了一个“打印”,以查看是否正在创建索引,然后,例如,当我第一次进入“常规”类别时,索引为“ Computadoras”和“平板电脑”被创造出来,但就在那个时候!然后,显示的数据是错误的!有什么想法吗?
我给你我的树视图实现。 Qt教程一等于什么?
def buildTree(categorias, parentTree, step):
for categoria in categorias:
#print "-"*step, categoria.descripcion
newTreeItem = CategoriasTreeItem(categoria, parentTree)
parentTree.appendChild(newTreeItem)
if len(categoria.subCategorias) > 0:
buildTree(categoria.subCategorias, newTreeItem, step + 1)
class CategoriasProductoTableModel(QtCore.QAbstractTableModel):
def __init__(self, session):
QtCore.QAbstractTableModel.__init__(self)
self.session = session
self.rootItem = CategoriasTreeItem()
def updateData(self):
categorias = self.session.query(CategoriaProducto).filter(CategoriaProducto.idCategoriaSuperior == None).all()
#print [len(categoria.subCategorias) for categoria in categorias]
buildTree(categorias, self.rootItem, 1)
#c = self.rootItem.child(0)
#print [i.data(0) for i in c.childItems]
self.modelReset.emit()
def setData(self, index, value, role):
if index.isValid() and role == QtCore.Qt.EditRole:
# implementar los seteos aca
return True
else:
return False
def columnCount(self, parent):
if parent.isValid():
return parent.internalPointer().columnCount()
else:
return self.rootItem.columnCount()
def data(self, index, role):
if not index.isValid():
return None
if role != QtCore.Qt.DisplayRole:
return None
item = index.internalPointer()
return item.data(index.column())
def flags(self, index):
if not index.isValid():
return QtCore.Qt.NoItemFlags
return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
def headerData(self, section, orientation, role):
if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
return self.rootItem.data(section)
def index(self, row, column, parent):
#if row < 0 or column < 0 or row >= self.rowCount(parent) or column >= self.columnCount(parent):
if not self.hasIndex(row, column, parent):
return QtCore.QModelIndex()
if not parent.isValid():
parentItem = self.rootItem
else:
parentItem = parent.internalPointer()
childItem = parentItem.child(row)
if childItem:
return self.createIndex(row, column, childItem)
else:
return QtCore.QModelIndex()
def parent(self, index):
if not index.isValid():
return QtCore.QModelIndex()
childItem = index.internalPointer()
parentItem = childItem.parent()
if parentItem == self.rootItem:
return QtCore.QModelIndex()
return self.createIndex(parentItem.row(), 0, parentItem)
def rowCount(self, parent):
if parent.column() > 0:
return 0
if not parent.isValid():
parentItem = self.rootItem
else:
parentItem = parent.internalPointer()
return parentItem.childCount()
【问题讨论】:
这是 Qt for Python (PyQt | PySide) 吗? 我看到您的代码使用了数据库。您能否创建一小段代码来说明可以在其他计算机上轻松粘贴和运行的问题?这将有助于定位问题。 这并不容易,因为我使用 sqlalchemy,并且有太多配置代码......我将给你一个与我在 DB 中得到的结构相同的预格式化代码 感觉自己像个白痴哈哈,当我完成离线代码让你测试它...我看到我是从 QAbstractTABLEModel 继承的!!!!而不是 QAbstractItemModel!!改变了它,它起作用了! T_T 还是谢谢你! 【参考方案1】:来自克里斯蒂安·佩雷斯的评论
我看到我继承自 QAbstractTABLEModel 而不是 QAbstractItemModel。当我改变它时,它起作用了。
【讨论】:
最近关于使用QTreeView
的QAbstractTableModel
的线程在这里:***.com/questions/27308309/…以上是关于QTreeView 总是显示相同的数据的主要内容,如果未能解决你的问题,请参考以下文章
QTreeView、QTableView、不同层次层的显示项