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

时间:2015-04-22 21:11:06

标签: pyside qmodelindex

在Pyside中打印出QModelIndex时,对象表示将显示行,列,父级,模型和内存地址。但是,如果打印出index.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 个答案:

答案 0 :(得分:1)

repr的{​​{1}}显示与其关联的模型的C ++地址。而index repr显示包装C ++模型的python对象的地址。

您可以使用shiboken模块验证这一点:

index.model()

将产生如下输出:

import shiboken
...

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