QList / Qlistwidget synchron halten
-
Hallo alle zusammen,
ich mache derzeit eine Projektarbeit für meine Hochschule dabei soll ich in QT ein Programm schreiben.(noch nie damit gearbeitet und nicht im Unterricht gehabt.)
Derzeit habe ich nur die Grundkenntnisse der C++ Programmierung und versuche mich durch etliche Tutorials und der QT-Dokumentation um mein Projekt zu realisieren.
Bisher hat alles geklappt nur ich hänge jetzt an einem Thema fest.Nämlich ich habe eine Klasse cEintrag die Personendaten speichert mit get und set methoden.
Habe einen Dialog gemacht der mir ein Objekt mit diesen Daten speichert.
Dieses lege ich in ein QList<cEintrag*> rein.Mein Plan ist es in dem mainwindow ein Qlistwidget einzusetzen wo meine nur der Name und der Vorname erscheint und durch Klicken auf den jeweiligen Namen die Daten in Textedits angezeigt werden.
//Daten in Liste einsetzen void MainWindow::addElement(cEintrag *neuerKontakt) { liste.append(neuerKontakt); // Überprüfung in der Konsole ob Funktion ausgeführt wird qDebug()<<"Add Element hinzugefügt"; } //Daten in die ListWidget einsetzen void MainWindow::addItemtoList(cEintrag *neuerKontakt){ ui->listWidget->addItem(neuerKontakt->getName()+", "+neuerKontakt->getvName()); }
Als nächstes habe ich einen Slot erstellt wo ich ein Element aus der Liste auswähle und mir dann die Daten von dem Jeweiligen angeklickten Namen in die jeweiligen Textfelder angezeigt werden sollen!!!
void MainWindow::on_listWidget_itemPressed(QListWidgetItem *item){ ui->textEdit->setText(liste.at(ui->listWidget->currentRow())->getName()); ui->textEdit_2->setText(liste.at(ui->listWidget->currentRow())->getvName()); ui->textEdit_3->setText(liste.at(ui->listWidget->currentRow())->getAdresse()); ui->textEdit_4->setText(liste.at(ui->listWidget->currentRow())->getTelPrivat()); ui->textEdit_5->setText(liste.at(ui->listWidget->currentRow())->getTelArbeit()); ui->textEdit_6->setText(liste.at(ui->listWidget->currentRow())->getFax()); ui->textEdit_7->setText(liste.at(ui->listWidget->currentRow())->getEmail()); }
Das Sieht dann so aus:
Wie ihr nun sehen könnt sind meine Listen nicht synchron von der Reihenfolge her, das liegt auch daran das ich das listwidget.sortigEnabled auf true hab.
Lass ich das Sortieren raus dann funktioniert das mit der Reihenfolge da die Position in meiner Liste mit der Position des Listwidget ist.Habt ihr eine Idee wie ich die beiden Listen synchron halten kann.
Oder gibt es eine Möglichkeit nur mit einer Liste zu arbeiten?Ich hoffe ich konnte mein Problem verständlich erklären.
Falls ihr noch Rückfragen habt oder noch mehr Code braucht, dann stehe ich euch jederzeit zur Verfügung und Danke euch schon mal im Voraus.
Liebe Grüße und Frohe Weihnachten
-
Hi @harupis,
Oder gibt es eine Möglichkeit nur mit einer Liste zu arbeiten?
Ja, die gibt es, nennt sich Model-View und ist genau das was Du hier brauchst. Im Prinzip ist das ganze eine Sicht (ein Formular oder Dialog) auf eine Datenbasis (Datenbank, Textdatei, oder auch dynamische Prozessdaten).
Eine Einführung dazu gibt es hier: http://doc.qt.io/qt-5/modelview.html
Du würdest dann Dein ListWidget durch eine ListView ersetzen und müsstest ein wenig Code schreiben, um die ListView mit den gewünschten Daten zu füllen.
Sieht am Anfang kompliziert aus, ist aber machbar. Es gibt einige Beispiele dazu im Netz.
Der Vorteil ist, dass später der Dialog der die Daten anzeigt einfach durch andere Elemente ersetzt werden kann, während die Daten die gleichen bleiben.
Frohe Weihnachten, und viel Erfolg.
-
Danke für die schnelle Rückmeldung habe es mir mal angschaut, aber mir wird hier nicht viel klar wie ich was machen soll.
Natürlich interessiert mich das ModellView und werde das auch bischen nachverfolgen.
Nur ich würd gerne eine lösung in dem ich nicht mein ganzes Programm neu schreiben muss.
Gibt es vlt die Möglichkeit in Items ein Objekt zu hinterelegen? Wenn ja wie geht das genau? -
@harupis
Na ja, das QListWidget ist intern auch ein QListView, nur das dort das Modell vordefiniert ist.
Man kann das natürlich auch so verwenden, dass man jedem in der Liste sichtbaren Item noch extra Daten mit anhängt, siehe http://doc.qt.io/qt-5/qlistwidgetitem.html#data
Das ist dann aber schon ziemlich wild zusammengehackt und vielleicht nicht der akademische Weg (könnte ja auf die Note Einfluss haben).
Aber dazu müsstest Du uns vielleicht auch verraten, was das Lernziel bei dieser Projektarbeit sein soll. Ist es verbessern der C++-Fähigkeiten, Kennenlernen von Qt, oder vielleicht doch strukturiertes aufbewahren von Daten? Oder alles zusammen?
-
Ich studiere Mechatronik, das ist nicht eines meiner Hautpfächer, ich soll nur ein wenig das QT Framework kennenlernen.
Bezüglich der SetData, diese Funktion hatte ich auch gesehen nur ich verstehe ihre Implementierung nicht.
Ich wäre für jeden Rat dankbar.
Gerade halte ich meine meine zwei listen mittels einer For schleife die die Namen vergleicht und somit die richtigen Daten ausspuckt.
Aber das finde ich als noch ein größeren murks.Kannst du mir vllt ein Beispiel geben wie du es machen würdest?
Liebe Grüße
-
@harupis said in QList / Qlistwidget synchron halten:
Kannst du mir vllt ein Beispiel geben wie du es machen würdest?
Nein, aber Google bedienen. Eines der ersten Ergebnisse ist: https://stackoverflow.com/questions/7136818/can-i-store-some-user-data-in-every-item-of-a-qlistwidget
Dort wird im Beispiel ein weiterer QString mit in der Liste abgelegt. Anstelle eines QString kann aber auch jedes andere Objekt (und damit auch eine Struktur mehrerer Objekte) abgelegt werden. Mehr sage ich dazu aber jetzt nicht, sonst ist die Hausaufgabe schon fertig gelöst.
Hoffe trotzdem geholfen zu haben.