2016-10-28 3 views
0

Ich habe ein QTreeWidget erstellt und es mit Strukturdaten gefüllt (myObj.name, myObj.DOB, myObj.age, etc).Wie bekomme ich Zeiger auf Index in QTreeWidget?

Wenn ich auf ein Element im Widget auswähle, muss ich die Zeigerdaten für diese Auswahl abrufen, um sie an anderer Stelle anzuzeigen.

Ich erstelle die Liste mit Zeigern, ich muss nur herausfinden, wie diese Zeigern wiederum abrufen, wenn ich auf der Liste auswählen.

+0

Sie meinen, die "myObj" -Zeiger – Naidu

+0

ja, der myObj-Zeiger. Das ist, was alle Strukturdaten zugewiesen hat, und es sind diese Daten, die ich retreive – bauervision

Antwort

0

So konnte ich mit QMap erreichen, was ich brauchte.

QMap<QTreeWidgetItem*, myObject*> myMap_container;//declared in .h 

Und dann in meiner cav:

void MainWindow::on_myTree_itemClicked(QTreeWidgetItem *item, int column){ 
     myObject* rowData = myMap_container[item]; 
} 

Von dort aus konnte ich die Gesamtheit meiner Struktur auf Daten zuzugreifen, die wie so zugewiesen wurde:

cout << rowData.Name << endl; 
cout << rowData.Age << endl; 
cout << rowData.SSN<< endl; 
cout << rowData.FavColor<< endl; 
+0

Jetzt habe ich mehr verstanden. Versuchen Sie, anstelle der Erstellung einer zusätzlichen Zuordnung dem Zeiger einen beliebigen Spaltenwert zuzuweisen und die Spalte auszublenden. Ich weiß nicht, ob es machbar ist oder nicht. nur eine Idee .. – Naidu

+0

gute Idee, nein, ich habe das nicht versucht – bauervision

0

Um auf die Daten innerhalb Ihres QTreeWidget (oder besser gesagt des vordefinierten Baummodells, das kostenlos mit QTreeWidget geliefert wird) zuzugreifen, können Sie eines der Signale verwenden, die QTreeWidget bei Benutzerinteraktion ausgibt. d.h. geklickt (QModelIndex).

Die QTreeWidget Dokumentation listet alle der Signale zur Verfügung: (http://doc.qt.io/qt-5/qtreewidget.html#details)

Zum Beispiel:

connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(print_item(QModelIndex))); 

Wo dies 'vom Typ QTreeWidget ist. (Ich habe eine Reihe von QString Elementen in meine Baumstruktur bevölkert),

Mit der oben verbunden Signal- und Slot, ein Klick auf einem meines Baumelement ergibt folgende Verfahren ausgeführt wird,

void MainWindow::print_item(QModelIndex index){ 

    qDebug()<<"Item :"<<index.data().toString(); 
} 

Wie Sie sehen können, ist der Parameter, den das 'angeklickte' Signal übergibt, ein QModelIndex, den ich dann in meiner obigen Methode für den Zugriff auf die Daten in meinem Baumelement verwende.

+0

Sehr nützlich, danke. Ich bin mir jedoch nicht sicher, wie ich von hier aus auf die Strukturdaten zugreifen kann. Ich brauche so etwas zu arbeiten: 'selPointer = index.data(); selPointer.age = 40; – bauervision

0

Da ich Baum Widget hier und nicht abstraktes Modell sehe, schätze ich, dass Sie Spalten in Ihrem Widget verwenden. Zum Beispiel hat Ihr Knoten drei Spalten: Name (0 Spalte), DOB (1 Spalte) und Alter (2 Spalten).

Wenn das der Fall ist, ist die einfache Art und Weise ist:

QList<QTreeWidgetItem *> QlistTreeWId = YourTree->selectedItems(); 

prüfen für die Listengröße, wenn Größe vorhanden ist, dann

yourObject.name = QlistTreeWId [0].text(0); //name column. 
yourObject.DOB= QlistTreeWId [0].text(1); //DOB column. 
yourObject.age= QlistTreeWId [0].text(2); //Age column. 

Hoffnung, das hilft.

+0

Vielen Dank für Ihre Antwort, aber was ich brauche, ist der Zeiger in einem bestimmten Index gespeichert. YourObject * muss zurückgegeben werden, da es viel mehr Daten als nur 3 Spalten enthält.Ich zeige nur 3 Spalten als kurze Übersicht. Ich erlaube dann dem Benutzer, sich auf die Daten für weitere Informationen zu beschränken. Dieses Widget ist das Sprungbrett in die Daten, aber wenn die Liste ausgefüllt wird, muss ich auf die Zeiger für jede Zeile zugreifen können. – bauervision

Verwandte Themen