ComboBox in Tabelle
ComboBox in Tabelle
Hi,
gibt es irgendeine Möglichkeit, nicht nur Text, sondern auch Widgets, wie z.B. eine ComboBox in eine QTableWidget zu bekommen??? Oder was könnte man da sonst machen?
MfG, Ozzy
gibt es irgendeine Möglichkeit, nicht nur Text, sondern auch Widgets, wie z.B. eine ComboBox in eine QTableWidget zu bekommen??? Oder was könnte man da sonst machen?
MfG, Ozzy
Hallo,
wenn du den Ansatz mit den Views verfolgen möchtest, dann fängst Du am besten hier an:
http://doc.trolltech.com/4.3/model-view ... ction.html
Du baust Dir ein einfaches Model (QAbstractItemModel ableiten). Die Items des Models enthalten die Einträge der ComboBox (falls diese unterschiedlich sein können).
Nun baust du Dir ein QItemDelegate (ableiten) das die ComboBox zeichnet und die Werte des ModelItems darin anzeigt.
Dein eigenes ItemDelegate kannst du dann dem View unterschieben mit
Ok, es ist ein wenig Schreibarbeit, aber man kann damit am Ende viel mehr anstellen als mit den "Item-Based-Item Widgets" (heißen so in der Integration). Qt liefert ne Menge Hilfe dazu in Form von Doku und auch Beispielen.
Viel Erfolg!
Ciao,
Sephral
wenn du den Ansatz mit den Views verfolgen möchtest, dann fängst Du am besten hier an:
http://doc.trolltech.com/4.3/model-view ... ction.html
Du baust Dir ein einfaches Model (QAbstractItemModel ableiten). Die Items des Models enthalten die Einträge der ComboBox (falls diese unterschiedlich sein können).
Nun baust du Dir ein QItemDelegate (ableiten) das die ComboBox zeichnet und die Werte des ModelItems darin anzeigt.
Dein eigenes ItemDelegate kannst du dann dem View unterschieben mit
Code: Alles auswählen
void QAbstractItemView::setItemDelegate ( QAbstractItemDelegate * delegate ) Ok, es ist ein wenig Schreibarbeit, aber man kann damit am Ende viel mehr anstellen als mit den "Item-Based-Item Widgets" (heißen so in der Integration). Qt liefert ne Menge Hilfe dazu in Form von Doku und auch Beispielen.
Viel Erfolg!
Ciao,
Sephral
Hi,
ich habe hier im Forum noch das hier gefunden:
http://www.qtforum.de/forum/viewtopic.php?p=3893&
Da steht doch quasi auch genau das, was ich suche, oder? Doch verstehe ich leider nicht, wie ich das einbauen muss. Könnt Ihr mir dabei vielleicht noch einmal helfen?
MfG, Ozzy
ich habe hier im Forum noch das hier gefunden:
http://www.qtforum.de/forum/viewtopic.php?p=3893&
Da steht doch quasi auch genau das, was ich suche, oder? Doch verstehe ich leider nicht, wie ich das einbauen muss. Könnt Ihr mir dabei vielleicht noch einmal helfen?
MfG, Ozzy
Ich denke, daß das hier das Thema noch am besten trifft.
Das ist ehrlich gesagt nicht unser Problem...und mir sitzt ein wenig die Zeit im Nacken
In das selbe Feld? Layout verwenden und beide Widgets in das Layout reinpacken.was mache ich denn, wenn ich mixen will, also z.B. in ein Feld auch noch einen Button machen will?
In ein anderes Feld? Z. B. zweites Delegate anlegen oder Delegate je nach Feld anders darstellen...
Moin,
also was mein größtes Problem momentan ist, dass ich nicht weiß, wie bereits am Anfang das Objekt in das Feld hineinbekomme. Soll heißen: die Tabelle sieht völlig normal aus, erst wenn man mit einem Doppelklick auf das Feld klickt, erscheint die ComboBox oder der Button. Wie macht man das denn, das ab sofort das Objekt zu sehen ist?
MfG, Ozzy
also was mein größtes Problem momentan ist, dass ich nicht weiß, wie bereits am Anfang das Objekt in das Feld hineinbekomme. Soll heißen: die Tabelle sieht völlig normal aus, erst wenn man mit einem Doppelklick auf das Feld klickt, erscheint die ComboBox oder der Button. Wie macht man das denn, das ab sofort das Objekt zu sehen ist?
MfG, Ozzy
-
Ginsengelf
- Beiträge: 79
- Registriert: 2. Mai 2007 10:21
Hi,
ich muss leider noch einmal nachfragen, da das alles Neuland für mich ist. Ich habe es jetzt so probiert:
Er sagt dann immer:
error: cannot call member function ‘void QAbstractItemView::openPersistentEditor(const QModelIndex&)’ without object
Weißt Du, was daran falsch ist? Und noch eine zweite Frage, was ich nämlich nicht so richtig verstanden habe: die Zeile, die ich auskommentiert habe: ist die nur dafür da, am Anfang Zahlen in die Felder zu schreiben, oder bewirkt die noch mehr?
Und noch eine kleine Frage: Wie bekomme ich es hin, dass wenn ich in einer Zelle etwas aus einer ComboBox auswähle, ich in einer anderen Zelle den Text ändere? Also wenn ich z.B. in der ersten Zeile, erste Spalte aus der ComboBox "Hund" auswähle, soll in der ersten Zeile, zweite Spalte das Wort "Tier" erscheinen.
Vielen Dank für Eure Geduld, Ozzy
ich muss leider noch einmal nachfragen, da das alles Neuland für mich ist. Ich habe es jetzt so probiert:
Code: Alles auswählen
for (int row = 0; row < 4; ++row) {
for (int column = 0; column < 2; ++column) {
QModelIndex index = model.index(row, column, QModelIndex());
QAbstractItemView::openPersistentEditor(index);
//model.setData(index, QVariant((row+1) * (column+1)));
}
}
error: cannot call member function ‘void QAbstractItemView::openPersistentEditor(const QModelIndex&)’ without object
Weißt Du, was daran falsch ist? Und noch eine zweite Frage, was ich nämlich nicht so richtig verstanden habe: die Zeile, die ich auskommentiert habe: ist die nur dafür da, am Anfang Zahlen in die Felder zu schreiben, oder bewirkt die noch mehr?
Und noch eine kleine Frage: Wie bekomme ich es hin, dass wenn ich in einer Zelle etwas aus einer ComboBox auswähle, ich in einer anderen Zelle den Text ändere? Also wenn ich z.B. in der ersten Zeile, erste Spalte aus der ComboBox "Hund" auswähle, soll in der ersten Zeile, zweite Spalte das Wort "Tier" erscheinen.
Vielen Dank für Eure Geduld, Ozzy
Ja, dir fehlen C++-Grundlagen.Weißt Du, was daran falsch ist?
openPersistentEditor(...) ist nicht statisch, außerdem hast du kein Object angegeben, aber das besagt ja die Fehlermeldung schon.
model.setData() setzt nur die Daten der Tabellenzelle, aber das steht eigentlich auch in der Doku
Kann die 2. Spalte vom Benutzer geändert werden? Wenn ja, würde ich es über das Delegate machen, wenn nein übers Model.Und noch eine kleine Frage: Wie bekomme ich es hin, dass wenn ich in einer Zelle etwas aus einer ComboBox auswähle, ich in einer anderen Zelle den Text ändere? Also wenn ich z.B. in der ersten Zeile, erste Spalte aus der ComboBox "Hund" auswähle, soll in der ersten Zeile, zweite Spalte das Wort "Tier" erscheinen.
Hi,
so, die Probleme habe ich alle soweit gelöst, aber eine Frage hätte ich noch:
in einem Feld sollen mehere Daten hinterlegt sein, jenachdem, was man im ersten Feld gewählt hat.
Wie speichert man so etwas am besten? Die Anzahl der Parameter kann auch verschieden sein. Gibt es da in Qt etwas passendes?
MfG, und vielen Dank schon einmal, Ozzy
so, die Probleme habe ich alle soweit gelöst, aber eine Frage hätte ich noch:
in einem Feld sollen mehere Daten hinterlegt sein, jenachdem, was man im ersten Feld gewählt hat.
Wie speichert man so etwas am besten? Die Anzahl der Parameter kann auch verschieden sein. Gibt es da in Qt etwas passendes?
MfG, und vielen Dank schon einmal, Ozzy
Hi,
sorry, ich probiere es etwas präziser zu machen: Also wie gesagt, je nach Auswahl in der ComboBox im ersten Feld einer jeden Zeile sollen Parameter für die 4 Zelle der jeweiligen Zeile gespeichert werden. Dies können unterschiedlich viele sein, also z.B. mal 3, mal 10. Die Länge der "Tabelle" ist dabei dynamisch, also kann während der Laufzeit geändert werden. Ich hätte einfach gerne etwas, was die Daten im "Hinterkopf" behält, da nicht alle in der Zelle angezeigt werden sollen.
Entschuldigt bitte noch einmal die echt schlampig gestellte Frage, MfG, Ozzy
sorry, ich probiere es etwas präziser zu machen: Also wie gesagt, je nach Auswahl in der ComboBox im ersten Feld einer jeden Zeile sollen Parameter für die 4 Zelle der jeweiligen Zeile gespeichert werden. Dies können unterschiedlich viele sein, also z.B. mal 3, mal 10. Die Länge der "Tabelle" ist dabei dynamisch, also kann während der Laufzeit geändert werden. Ich hätte einfach gerne etwas, was die Daten im "Hinterkopf" behält, da nicht alle in der Zelle angezeigt werden sollen.
Entschuldigt bitte noch einmal die echt schlampig gestellte Frage, MfG, Ozzy