如何从 PyQt4 中的 QVariant 取回我的 python 对象?
我正在创建 QAbstractItemModel 的子类以显示在 QTreeView 中。
我的 index()
和 parent()
函数使用 QAbstractItemModel
继承函数 createIndex< 创建
QModelIndex
/code> 并为其提供所需的行
、列
和数据
。这里,出于测试目的,数据是一个 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>"
在 index()
、parent()
和 data()
函数中,我需要取回数据。它以 QVariant
形式出现。如何从 QVariant 取回我的 Python 对象?
I am creating a subclass of QAbstractItemModel
to be displayed in an QTreeView
.
My index()
and parent()
function creates the QModelIndex
using the QAbstractItemModel
inherited function createIndex
and providing it the row
, column
, and data
needed. Here, for testing purposes, data is a Python string.
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>"
Within the index()
, parent()
, and data()
functions I need to get my data back. It comes as a QVariant
. How do I get my Python object back from the QVariant?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你试过这个吗?
http://pyqt.sourceforge.net/Docs/PyQt4/qvariant.html# toPyObject (只是为了完整性,但那里没什么可看的......)
Have you tried this?
http://pyqt.sourceforge.net/Docs/PyQt4/qvariant.html#toPyObject (just for completeness, but there isn't much to see there...)
关键是直接在
QModelIndex
上使用internalPointer()
,而不是处理QVariant
。The key thing is to use
internalPointer()
directly on theQModelIndex
, not dealing with theQVariant
at all.