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.

  • Wie erstelle ich einen Filter für QTableWidget?
  • Wie kann ich die "?" - Hilfe-Taste auf der "Titelleiste" eines Qt-Dialogs ausblenden / löschen?
  • Hyperlinks in QTreeView
  • Probleme bei der Zusammenstellung von ros-indigo-qt-gui-cpp in Arch Linux ARM
  • PyQt: Wie kann ich einen benutzerdefinierten Scrollbereich erstellen?
  • Verbinden von zwei verschiedenen Widgets zusammen auf qt mit Python durch einen Knopf
  • Qt4: Schreiben Sie eine Funktion, die einen Dialog erzeugt und die Wahl des Benutzers zurückgibt
  • Wie lasse ich ein PySide-Signal mit einem benutzerdefinierten Python-Typ-Argument aus?
  • Wie stelle ich den User-Agent für eine QNetworkRequest in PyQtWebkit ein?
  • Qt Verzeichnisbaum aus Daten
  • Wrapping C ++ Qt-Widget für die Verwendung in Python mit PySide
  • Python ist die beste Programmiersprache der Welt.