Ich verwende QTreeView
, um dem Benutzer einige Daten anzuzeigen. Was ich will, ist, ein tatsächliches Objekt an jeden Knoten anzuhängen, der QStandardItem
darstellt.Anfügen von benutzerdefiniertem Objekt an QStandardItem in Qt
Um den Objektverweis in QStandardItem
zu speichern:
QStandardItem *child = new QStandardItem(s);
child->setFlags(child->flags() & ~Qt::ItemIsEditable);
child->setData(QVariant(QVariant::UserType, i), Qt::UserRole + 10);
das eigentliche Objekt zuzugreifen, wenn es in der Benutzeroberfläche angeklickt wird:
void MyOtherClass::handleTreeViewSelectionChanged(const QModelIndex &i)
{
MyClass* o = i.data(Qt::UserRole + 10).value<MyClass*>();
// do other stuff with o
}
Der obige Aufruf NULL
nur zurückgibt. Wer weiß, wie man mit einer solchen Anforderung umgehen kann?
Ich fand absolut nichts nützliches im Internet.
Jede Hilfe würde sehr geschätzt werden.
Beachten Sie, dass Sie zusätzlich zu den oben genannten Funktionen Drag & Drop mit diesen benutzerdefinierten Objekten unterstützen möchten. Um dies zu tun, müssen Sie Stream-Operatoren für diesen Typ mit 'qRegisterMetaTypeStreamOperators()' registrieren, siehe http://qt-project.org/doc/qt-5/qmetatype.html#qRegisterMetaTypeStreamOperators – Googie