Did*_*set 5 python qvariant pyqt4 qabstractitemmodel
我正在创建一个QAbstractItemModel要显示的子类QTreeView.
我index()和parent()函数创建QModelIndex使用QAbstractItemModel继承功能createIndex,并提供它row,column和data需要.这里,出于测试目的,数据是Python字符串.
class TestModel(QAbstractItemModel):
def __init__(self):
QAbstractItemModel.__init__(self)
def index(self, row, column, parent):
if parent.isValid():
return self.createIndex(row, column, "bar")
return self.createIndex(row, column, "foo")
def parent(self, index):
if index.isValid():
if index.data().data() == "bar": <--- NEVER TRUE
return self.createIndex(0, 0, "foo")
return QModelIndex()
def rowCount(self, index):
if index.isValid():
if index.data().data() == "bar": <--- NEVER TRUE
return 0
return 1
def columnCount(self, index):
return 1
def data(self, index, role):
if index.isValid():
return index.data().data() <--- CANNOT DO ANYTHING WITH IT
return "<None>"
Run Code Online (Sandbox Code Playgroud)
内index(),parent()和data()功能我需要让我的数据备份.它来自一个QVariant.如何从QVariant中恢复我的Python对象?
Ben*_*end 12
你试过这个吗?
my_python_object = my_qvariant.toPyObject()
Run Code Online (Sandbox Code Playgroud)
http://pyqt.sourceforge.net/Docs/PyQt4/qvariant.html#toPyObject(只是为了完整性,但没有太多东西可以看到......)
关键是internalPointer()直接在 上使用QModelIndex,根本不用处理QVariant。
class TestModel(QAbstractItemModel):
def __init__(self, plan):
QAbstractItemModel.__init__(self)
def index(self, row, column, parent):
if not parent.isValid():
return self.createIndex(row, column, "foo")
return self.createIndex(row, column, "bar")
def parent(self, index):
if index.internalPointer() == "bar":
return self.createIndex(0, 0, "foo")
return QModelIndex()
def rowCount(self, index):
if index.internalPointer() == "bar":
return 0
return 1
def columnCount(self, index):
return 1
def data(self, index, role):
if role == 0: # Qt.DisplayRole
return index.internalPointer()
else:
return None
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4981 次 |
| 最近记录: |