Sto usando QTreeView
per mostrare alcuni dati all'utente. Quello che voglio è attaccare un oggetto reale a ciascun nodo rappresentato usando QStandardItem
.Allegare oggetto personalizzato a QStandardItem in Qt
Per salvare il riferimento all'oggetto in QStandardItem
:
QStandardItem *child = new QStandardItem(s);
child->setFlags(child->flags() & ~Qt::ItemIsEditable);
child->setData(QVariant(QVariant::UserType, i), Qt::UserRole + 10);
per accedere all'oggetto vero e proprio quando si fa clic nell'interfaccia utente:
void MyOtherClass::handleTreeViewSelectionChanged(const QModelIndex &i)
{
MyClass* o = i.data(Qt::UserRole + 10).value<MyClass*>();
// do other stuff with o
}
La chiamata sopra restituisce solo NULL
. Qualcuno sa come affrontare un simile requisito?
Non ho trovato assolutamente nulla di utile sul web.
Qualsiasi aiuto sarebbe molto apprezzato.
Nota: oltre a quanto sopra, è possibile supportare il trascinamento della selezione con tali oggetti personalizzati. Per fare ciò, è necessario registrare gli operatori di flusso per quel tipo con 'qRegisterMetaTypeStreamOperators()', vedere http://qt-project.org/doc/qt-5/qmetatype.html#qRegisterMetaTypeStreamOperators – Googie