كيف يمكنني استعادة كائن بيثون الخاص بي من Qvariant في PYQT4؟
-
22-09-2019 - |
سؤال
أقوم بإنشاء فئة فرعية من QAbstractItemModel
ليتم عرضه في QTreeView
.
لي index()
و parent()
الوظيفة تخلق QModelIndex
باستخدام QAbstractItemModel
الوظيفة الموروثة createIndex
وتوفيرها row
, column
, ، و data
ضروري. هنا ، لأغراض الاختبار ، البيانات هي سلسلة بيثون.
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؟
المحلول 2
الشيء الرئيسي هو الاستخدام 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
نصائح أخرى
هل جربت هذا؟
my_python_object = my_qvariant.toPyObject()
http://pyqt.sourceforge.net/docs/pyqt4/qvariant.html#topyobject (فقط من أجل الاكتمال ، ولكن ليس هناك الكثير لرؤيته هناك ...)
لا تنتمي إلى StackOverflow