Seite 1 von 1

In QStandardItem Objekte (z.B. QVector) speichern?

Verfasst: 4. Oktober 2010 18:37
von XL
Hallo,

in QStandardItem kann man ja mit setData() o.ä. z.B. einen QString speichern.
Ist es möglich dort auch andere Objekte (konkret hätte ich gern einen QVector) zu verwenden, d.h. so etwas wie

Code: Alles auswählen

item->setData(vecFreq, Qt::EditRole);
Wenn vector ein Zeiger ist erhalte ich beim Kompilieren die Fehlermeldung

Code: Alles auswählen

QVariant::QVariant(void*) is private
Ist vector ein Objekt dann kommt

Code: Alles auswählen

no matching function for call to 'QStandardItem::setData(QVector<double>&, Qt::ItemDataRole)' 
Grüße
Axel[/code]

Verfasst: 4. Oktober 2010 19:15
von padreigh
schau dir die API an ... du kannst da keinen QString reintun, nur QVariants (der Zufällig für QString überladen ist ...) ... Schaust du dort nach dann siehst du das QVariant einen Typ hat der QList<QVariant> ist ... kombinier das mit QVector::toList() und nimm einen QVector<QVariant> als Ausgangspunkt ... und so weiter ... alles API Wissen ;)
Einen guten Anhaltspunkt bietet dir übrigens die nächste Zeile der (inkomplett geposteten :evil: ) Fehlermeldung die sagt dir was die Methode erwartet ...

Verfasst: 4. Oktober 2010 19:58
von Christian81
Da QVector<int> kein 'normaler' Datentyp ist welcher direkt von QVariant unterstützt wird:

Code: Alles auswählen

Q_DECLARE_METATYPE(QVector<int>)

int main(int argc, char **argv)
{
  QApplication app(argc, argv);
  
  QVector<int> v;
  qRegisterMetaType<QVector<int> >("QVector<int>");
  QVariant variant;
  variant.setValue(v);
  
  QVector<int> v2 = variant.value<QVector<int> >();

  return 0;
}
Siehe auch Doku zu QVariant ...

Verfasst: 6. Oktober 2010 11:30
von XL
Funktioniert!
Vielen Dank!