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

Alles rund um die Programmierung mit Qt
Antworten
XL
Beiträge: 18
Registriert: 1. Oktober 2010 19:14

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

Beitrag 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]
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag 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 ...
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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 ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
XL
Beiträge: 18
Registriert: 1. Oktober 2010 19:14

Beitrag von XL »

Funktioniert!
Vielen Dank!
Antworten