QTreeView weitere Informationen verpassen

Alles rund um die Programmierung mit Qt
Antworten
matzunami
Beiträge: 7
Registriert: 3. Mai 2011 09:14

QTreeView weitere Informationen verpassen

Beitrag von matzunami »

Hallo,

ich habe folgendes Problem, bei dem ihr mir hoffentlich weiterhelfen könnt.

Ich erstelle mir ein QTreeView, welches mit einem QStandardItemModel verbunden ist, dass wiederum mit QStandardItem's verknüpft ist.
Die QStandardItem's beinhaltet nun die einzelnen Wort, die im QTreeView als Baumstrucktur angezeigt werden. So weit so gut. Erstellt wird der Baum aus einer Datenbank, ala

QSandardItem tst = new QStandardItem(Query.value(TypeName).toString());.

Wenn ich nun Informationen aus dem QTreeView haben möchte, bekomme ich nur den Namen, der im Baum erscheint. Existiert dieser jedoch zweimal kann ich nicht mehr darauf zurückschließen, welcher gemeint ist. Ich habe versucht dem QStandardItem weiter Informationen zu verpassen, ala

QStandardItem StdItem->setText(Query.value(TypeName).toString());
QStandardItem StdItem->setData(Query.value(TypeId).toString());.

Im Baum erscheint nun immer noch der richtige Name (von "setText"), ich komme aber nicht mehr an die Information von "setData", welche nun noch eine eindeutige ID enthalten würden, heran. Oder funktioniert dies doch irgend wie ala
ui->treeView->model->itemData...???

Greife ich auf das QStandardItem direkt zu, kann ich beide Werte auslesen.
Oder gehe ich komplett falsch an die Sache heran? Dies ist das erste mal, dass ich mir einen QTreeView erstelle. Ich hoffe mein Problem ist einigermaßen klar geworden. Würde mich über Hilfe freuen.

Gruß
matzunami
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn es ein setData( gibt, git es auch eine get-Methode namens data()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
matzunami
Beiträge: 7
Registriert: 3. Mai 2011 09:14

Beitrag von matzunami »

da QTreeView->setModel(... ein QAbstractItem und kein QStandardItem möchte, gibt es dann auch kein "->data" mehr (gibts bei QAbstractItem nicht mehr). Also hab ich das gefühl, dass die Information bei der Übergabe verlohren geht.
Es muss doch aber ein emöglichkeit geben in einer Baumstrucktur gleiche Namen in verschiedenen Zweigen auseinander zu halten.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

setModel() möchte kein Item sondern ein Model und da QStandardItemModel von QAbstractItemModel abgeleitet ist...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: QTreeView weitere Informationen verpassen

Beitrag von solarix »

matzunami hat geschrieben: ...Im Baum erscheint nun immer noch der richtige Name (von "setText"), ich komme aber nicht mehr an die Information von "setData", welche nun noch eine eindeutige ID enthalten würden, heran.
...
Angenommen, du hast in einem QWidget (oder QDialog oder QMainWindow .. halt der "Parent") einen Pointer auf den QTreeView und auf das erwähnte QStandardItemModel:

Code: Alles auswählen

  myTreeView = new QTreeView(....
  myModel      = new QStandardItemModel();
  myTreeView->setModel(myModel);
Dann kannst du doch jederzeit später wieder deine Items lesen:

Code: Alles auswählen

  QStandardItem *item = myModel->item(0,0);
  Q_ASSERT(item);
   int dbId = item->data().toInt();
Oder verstehe ich was falsch?

BTW: du brauchst beim Variant auch nicht über Strings zu gehen.. wenn du schon eine Datenbank-ID speichern möchtest, kannst du gleich den QVariant mit Typ "int" nehmen..

hth!
matzunami
Beiträge: 7
Registriert: 3. Mai 2011 09:14

Beitrag von matzunami »

ich möchte die Daten vom Item, aus dem QTreeView bekommen. Also so etwa:

ui->my_treeView->model(....???...Item->data().toInt;

Dies bekomm ich nicht mehr hin. Die Information von welchen Item ich die Daten bekommen möchte, steckt ja nur im QTreeView (welchen zweig ich gerade angeklickt habe). Leider gelingt es mir nicht, über my_treeView auf das Model und über dieses auf die verknüpften Items zuzugreifen.

Ich hoffe es ist jetzt etwas klarer geworden.

Gruß
matzunami
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Weiter kann die aktuelle Selection jederzeit via SelectionModel abgefragt werden:
http://doc.qt.nokia.com/latest/qabstrac ... ctionModel

Also so in etwa:

Code: Alles auswählen

QModelIndexList  indexes = myView->selectionModel()->selectedIndexes();

hth..
matzunami
Beiträge: 7
Registriert: 3. Mai 2011 09:14

Beitrag von matzunami »

Ich bekomm es immer noch nicht hin:

Beim QStandardItem mach ich folgendes:

StdItem[0]->setText(Query.value(TypeName).toString());
StdItem[0]->setData(Query.value(TypeId).toString());

Im Debuger seh ich nun das StdItem[0] zwei values besitzt - value[0] = "QString1" und value[1] = "QString2".

Nun mach ich folgendes (andere Funktion):

QString data0 = ui->my_treeView->model()->itemData(ui->my_treeView->selectionModel()->currentIndex()).value(0).toString();

dies gibt mir korrekt den "QString1" wieder, also alles schön. Mach ich nun:

QString data0 = ui->my_treeView->model()->itemData(ui->my_treeView->selectionModel()->currentIndex()).value(1).toString();

bekomm ich nichts zurück (leerer string), warum bekomm ich da nicht "QString2" zurück???
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie ich oben schon geschrieben habe ist der Gegenpart von setData() nunmal data() und nicht value(). Der Rest sind C++ Grundlagen...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
matzunami
Beiträge: 7
Registriert: 3. Mai 2011 09:14

Beitrag von matzunami »

es gibt aber kein data mehr, weder bei ->model..., noch bei ->selectionModel->...., sonst hätt ichs doch genommen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie wäre es mal wenn man die Doku liest anstatt nur der Code-Vervollständigung zu vertrauen?
http://doc.qt.nokia.com/4.7/qabstractit ... .html#data
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
matzunami
Beiträge: 7
Registriert: 3. Mai 2011 09:14

Beitrag von matzunami »

ok sorry, das stimmt allerdings, da hab ich mich drauf verlassen. Es funktioniert jetzt wie ich es möchte.
Vielen Dank für die Hilfe.
Antworten