打印 QModelIndex 与 QModelIndex.model():不同的十六进制值?
Printing QModelIndex vs QModelIndex.model(): different hex values?
当您在 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
?
index
的 repr
显示与其关联的模型的 C++ 地址。而 index.model()
的 repr
显示了包装 C++ 模型的 python 对象的地址。
您可以使用 shiboken 模块验证这一点:
import shiboken
...
print index
print index.model()
print shiboken.dump(index.model())
这将产生如下输出:
<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
当您在 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
?
index
的 repr
显示与其关联的模型的 C++ 地址。而 index.model()
的 repr
显示了包装 C++ 模型的 python 对象的地址。
您可以使用 shiboken 模块验证这一点:
import shiboken
...
print index
print index.model()
print shiboken.dump(index.model())
这将产生如下输出:
<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