Funktionsweise von internalPointer

In einem Code unterhalb von Car() und Plane() erben von Base Class.

Bildbeschreibung hier eingeben

Jedes Mal, QTableView geklickt OnClick() , erhält die OnClick() Methode ein QModelIndex als eingehendes Argument.

Innerhalb des Gültigkeitsbereichs der OnClick() Methode node=index.internalPointer() -Linie gibt eine Instanz von Car oder Plane zurück, die in der Variable self.items des self.items definiert ist.

Model's self.items ist keine Liste, sondern eine self.items hierarchische Variable. Die internePointer internalPointer() -Methode macht es dann angezeigt, eine Indexvariable zu indizieren, wobei sie als Argument die Zeilennummer von QModelIndex, die angeklickt wurde, geliefert hat.

Ich würde mich freuen, wenn Sie mehr Details darüber, wie internalPointer() -Methode funktioniert, so könnte ich Design Plan, Auto und Base-Klassen entsprechend (so dass sie zurück, was ich will und nicht was 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_()) 

One Solution collect form web for “Funktionsweise von internalPointer”

Es ist nicht ganz klar, was du meinst, indem du deine Klassen entsprechend createIndex() , aber interner Zeiger ist nur etwas, das du mit Hilfe von createIndex() in QModelIndex .

Siehe Dokumentation von createIndex .

So ist es an Ihnen, etwas Brauchbares darin zu speichern.

  • PyQt5 - Wie kann ich den Designer starten?
  • Sagen Sie, wenn PC aus dem Standby mit Qt kommt
  • Verwenden Sie QAction ohne Hinzufügen zum Menü (oder Symbolleiste)
  • Kann QtWebKitWidgets nicht in PyQt5 importieren
  • QImage zu Numpy Array mit PySide
  • Multiprocessing funktioniert in Python aber nicht in iPython
  • Ich möchte eine Qt-QML-Combobox auf eine PyQt5-Objekt-Eigenschaft setzen
  • Ist es möglich, QWebKit zur Anzeige von PDF-Dateien zu bekommen?
  • Qt Designer generiert C ++ - Code
  • Drehen - TransformOriginPoint - PyQt4
  • Eclipse externes Werkzeug für Qt .ui zu pyuic
  • Python ist die beste Programmiersprache der Welt.