2015-04-22 44 views
1

在Pyside中打印出QModelIndex時,對象表示顯示行,列,父,模型和內存地址。但是,如果您打印出index.model(),則模型的內存地址不同。打印QModelIndex與QModelIndex.model():不同的十六進制值?

下面是一些代碼,演示了我的意思:

from PySide import QtGui, QtCore 

class TestQModelIndexModelWin(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(TestQModelIndexModelWin, self).__init__(parent) 

     self.listView = QtGui.QListView() 
     self.setCentralWidget(self.listView) 

     listModel = QtGui.QStringListModel(['foo', 'bar', 'baz']) 
     self.listView.setModel(listModel) 

     numItems = len(listModel.stringList()) 
     for i in range(numItems): 
      index = listModel.index(i, 0) 
      print index 
      print index.model() 

當運行這段代碼,結果看起來像下面這樣:

<PySide.QtCore.QModelIndex(0,0,0x0,QStringListModel(0xef1b7e0)) at 0x0000000017656D08> 
<PySide.QtGui.QStringListModel object at 0x0000000017656948> 
<PySide.QtCore.QModelIndex(1,0,0x0,QStringListModel(0xef1b7e0)) at 0x00000000176564C8> 
<PySide.QtGui.QStringListModel object at 0x0000000017656948> 
<PySide.QtCore.QModelIndex(2,0,0x0,QStringListModel(0xef1b7e0)) at 0x0000000017656D08> 
<PySide.QtGui.QStringListModel object at 0x0000000017656948> 

爲什麼QModelIndex顯示QStringListModel十六進制值作爲0xef1b7e0但QStringListModel顯示其地址爲0x0000000017656948

回答

1

repr對於index顯示了它所關聯模型的C++地址。而index.model()repr顯示了包裝C++模型的python對象的地址。

import shiboken 
... 

    print index 
    print index.model() 
    print shiboken.dump(index.model()) 

這將產生這樣的輸出:

您可以通過使用shiboken模塊驗證這個

<PySide.QtCore.QModelIndex(2,0,0x0,QStringListModel(0x17b0b40)) at 0x7ff1a3715998> 
<PySide.QtGui.QStringListModel object at 0x7ff1a3715950> 
C++ address....... PySide.QtGui.QStringListModel/0x17b0b40 
hasOwnership...... 1 
containsCppWrapper 1 
validCppObject.... 1 
wasCreatedByPython 1 
+0

我不知道,你可以得到使用'對象的C++地址shiboken'。好的信息。 –