QTreeView始终显示相同的数据
问题描述:
我有一个项目树。它是这样的:QTreeView始终显示相同的数据
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()
答
从评论由克里斯蒂安·佩雷斯
我看到了,我是从QAbstractTABLEModel而不是继承化QAbstractItemModel。当我改变它的时候,它工作。
+0
使用'QAbstractTableModel'的'QTreeView'的最近线程在这里:http://stackoverflow.com/questions/27308309/display-data-from-qabstracttablemodel-in-qtreeview – neuronet
这是Python的Qt(PyQt | PySide)吗? – Korchkidu
yap,PySide实际上 –
我看到你的代码使用了一个数据库。您能否创建一小段代码来说明可以在其他计算机上轻松粘贴和运行的问题?这将有助于找出问题。 –