2010-02-25 16 views
5

मैं QTreeView में प्रदर्शित होने के लिए QAbstractItemModel का उप-वर्ग बना रहा हूं।मैं Pytht4 में QVariant से अपनी पायथन ऑब्जेक्ट को वापस कैसे प्राप्त करूं?

मेरे index() और parent() समारोह QAbstractItemModel विरासत में मिला समारोह createIndex उपयोग करने और इसे उपलब्ध कराने के row, column, और data जरूरत QModelIndex पैदा करता है। यहां, परीक्षण उद्देश्यों के लिए, डेटा एक पायथन स्ट्रिंग है।

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 से वापस कैसे प्राप्त करूं?

उत्तर

4

मुख्य बात सीधे QModelIndex पर internalPointer() उपयोग करने के लिए, सब पर 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 
12

क्या आपने यह कोशिश की है?

my_python_object = my_qvariant.toPyObject() 

http://pyqt.sourceforge.net/Docs/PyQt4/qvariant.html#toPyObject

+0

यह उत्तर प्रारंभिक प्रश्न के साथ अधिक इनलाइन है। इससे मुझे धन्यवाद मिली – Craig

संबंधित मुद्दे