打印QModelIndex与QModelIndex.model():不同的十六进制值?

问题描述:

在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

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'。好的信息。 –