gpt4 book ai didi

python - 内部指针方法的工作原理

转载 作者:太空宇宙 更新时间:2023-11-03 17:59:57 25 4
gpt4 key购买 nike

Car() 下面的代码中和Plane()继承自Base类。

enter image description here

每次QTableView点击OnClick()方法接收 QModelIndex作为其传入参数。

OnClick() 的范围内方法node=index.internalPointer()行返回模型 self.items 中定义的汽车或飞机的实例多变的。

型号self.items不是一个列表,而是一个子类层次变量。然而internalPointer()方法确实使它看起来索引了一个列表变量,并将所单击的 QModelIndex 的行号作为参数提供给它。

如果您提供有关如何 internalPointer() 的更多详细信息,我将不胜感激。方法有效,因此我可以相应地设计 Plane、Car 和 Base 类(因此它们返回我想要的内容,而不是 internalPointer()

from PyQt4 import QtCore, QtGui
app=QtGui.QApplication(sys.argv)

class Base(object):
def __init__(self, name, parentNode=None):
self._name = name
self._children=[]
self._parentNode=parentNode
if parentNode is not None:
parentNode.addChild(self)
def typeInfo(self):
return "BaseNode"
def addChild(self, child):
self._children.append(child)
def name(self):
return self._name
def setName(self, name):
self._name = name
def child(self, row):
return self._children[row]
def childCount(self):
return len(self._children)
def getParent(self):
return self._parentNode
def row(self):
if self._parentNode is not None:
return self._parentNode._children.index(self)

class Car(Base):
def __init__(self, name, parent=None):
super(Car, self).__init__(name, parent)
def typeInfo(self):
return "CarNode"
class Plane(Base):
def __init__(self, name, parent=None):
super(Plane, self).__init__(name, parent)
def typeInfo(self):
return "PlaneNode"

class DataModel(QtCore.QAbstractItemModel):
def __init__(self):
QtCore.QAbstractTableModel.__init__(self)

self.items = Base("Base")
car0 = Car("Car0", self.items)
car1 = Car("Car1", car0)
car2 = Car("Car2", car1)

plane0 = Plane("Plane0", self.items)
plane1 = Plane("Plane1", plane0)
plane2 = Plane("Plane2", plane1)

def columnCount(self, index=QtCore.QModelIndex()):
return 3

def getNodeFromIndex(self, index):
if index.isValid():
node = index.internalPointer()
if node:
return node
return self.items

def parent(self, index):
node = self.getNodeFromIndex(index)
parentNode = node.getParent()
if parentNode == self.items:
return QtCore.QModelIndex()
return self.createIndex(parentNode.row(), 0, parentNode)

def index(self, row, column, parentIndex):
parentNode = self.getNodeFromIndex(parentIndex)
childItem = parentNode.child(row)
if childItem:
newIndex=self.createIndex(row, column, childItem)
return newIndex
else:
return QtCore.QModelIndex()

def rowCount(self, parent=QtCore.QModelIndex()):
if not parent.isValid():
parentNode = self.items
else:
parentNode = parent.internalPointer()
return parentNode.childCount()

def data(self, index, role):
if not index.isValid(): return QtCore.QVariant()
row=index.row()
column=index.column()
node=index.internalPointer()

if role==QtCore.Qt.DisplayRole:
if column==0 and not self.columnCount():
return QtCore.QModelIndex()
else:
return QtCore.QModelIndex()

class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
mainLayout=QtGui.QHBoxLayout()
self.setLayout(mainLayout)

self.dataModel=DataModel()

self.viewA=QtGui.QTableView()
self.viewA.setModel(self.dataModel)
self.viewA.clicked.connect(self.onClick)

mainLayout.addWidget(self.viewA)
self.show()

def onClick(self, index):
node=index.internalPointer()
print node.name(), node.getParent().name()

window=Window()
sys.exit(app.exec_())

最佳答案

尚不清楚相应地设计类的含义,但内部指针只是您在 QModelIndex 中的 createIndex() 的帮助下创建的东西。

请参阅 createIndex 的文档.

因此,您可以在其中存储有用的内容。

关于python - 内部指针方法的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27870213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com