QTreeView weitere Informationen verpassen
QTreeView weitere Informationen verpassen
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
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:
Wenn es ein setData( gibt, git es auch eine get-Methode namens data()
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
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.
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:
Re: QTreeView weitere Informationen verpassen
Angenommen, du hast in einem QWidget (oder QDialog oder QMainWindow .. halt der "Parent") einen Pointer auf den QTreeView und auf das erwähnte QStandardItemModel: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.
...
Code: Alles auswählen
myTreeView = new QTreeView(....
myModel = new QStandardItemModel();
myTreeView->setModel(myModel);
Code: Alles auswählen
QStandardItem *item = myModel->item(0,0);
Q_ASSERT(item);
int dbId = item->data().toInt();
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!
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
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:
Das aktuell aktive Item gibts über http://doc.trolltech.com/4.7/qabstracti ... rrentIndex bzw. über das Signal http://doc.trolltech.com/4.7/qtreeview. ... entChanged und das Model gibt die Daten über http://doc.trolltech.com/4.7/qstandardi ... .html#data zurück.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Weiter kann die aktuelle Selection jederzeit via SelectionModel abgefragt werden:
http://doc.qt.nokia.com/latest/qabstrac ... ctionModel
Also so in etwa:
hth..
http://doc.qt.nokia.com/latest/qabstrac ... ctionModel
Also so in etwa:
Code: Alles auswählen
QModelIndexList indexes = myView->selectionModel()->selectedIndexes();
hth..
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???
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:
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
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
http://doc.qt.nokia.com/4.7/qabstractit ... .html#data
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung