ich habe mich von dem QT-Beispiel "simpletreemodel" inspirieren lassen und habe eine Baumansicht programmiert. Mein Baum besteht aus verketteten Objekten, die von TreeNode abgeleitet sind. Die Funktion getTreeNode() soll mir einen Zeiger auf so einen Knoten liefern. Dazu muß data() bemüht werden.
So richtig leuchtet mir die Verwendung von QVariant nicht ein. Am Ende lande ich doch bei typlosen Zeigern.
Beispielsweise liefert ein Klick auf ein Baumelement dessen Index. Aus diesem Index muß ich einen Zeiger auf das tatsächliche Objekt basteln.
Ohne wilde "Castereien" komme ich da nicht hin, obwohl folgendes Programm funktioniert:
Code: Alles auswählen
QVariant TreeModel::data(const QModelIndex &index, int role) const
{
if(!index.isValid()) return QVariant();
if(role == Qt::UserRole)
return qVariantFromValue(index.internalPointer());
return QVariant();
}
TreeNode *TreeModel::getNode(const QModelIndex &index)
{
void *qobj;
QVariant variant = data(index, Qt::UserRole);
if(qVariantCanConvert<void *>(variant))
qobj = qVariantValue<void *>(variant);
return static_cast<TreeNode *>(qobj);
};
Danke für jeden sachdienlichen Hinweis!