Seite 1 von 1
Zugriff auf einzelne Zellen
Verfasst: 18. Januar 2009 16:57
von nicmoe
Hi,
ich bin ein kompletter neuling in sachen Qt und hab mir deswegen eingentlich auch schon ein Buch drüber gekauft. Das Problem ist, dass in dem Buch nichts drin steht über mein Problem:
Ich habe ein QTableWidget das mit per SQL mit daten gefüttert wird. Ich möchte jetzt allerdings auf eine einzelne Zelle zugreifen, die angeklickt wurde und die Daten irgendwie verarbeiten. Allerdings finde ich keine solche Funktion bei der Klasse.
Kann mir da jemand helfen?
danke schonmal,
nicmoe
Verfasst: 18. Januar 2009 17:18
von franzf
Schau dir mal QSqlTableModel (bzw. QSqlRelationalTableModel) in Verbindung mit QTableView an.
Sollte mit minimalstem Aufwand dein Problem lösen.
Grüße
Franz
// edit:
Außerdem gibts doch auch bei QTableWidget die SIGNALS cellClicked() und itemClicked(), auf die du reagieren kannst.
Verfasst: 19. Januar 2009 23:52
von nicmoe
Hi,
dankeschön. Ich werds mal versuchen und schauen ob's geht.
Verfasst: 20. Januar 2009 22:59
von nicmoe
Hi,
also, ich kann erfolgreich ein QTableView mit der QSqlTable über setModel() verbinden. Allerdings scheint mit TableView rein auf das Darstellen fixiert zu sein und bietet keine mir ersichtliche Möglichkeit mir das zu liefern was ich brauche.
Allerdings kann das QTableWidget nicht über setModel() mit der QSqlTable verbunden werden, weil der Compiler meckert, dass die Funktion private sei. Was also tun? Die ganzen tollen Signals befinden sich in dieser Klasse und ich kann sie nicht nutzen -.-
cu nicmoe
Verfasst: 21. Januar 2009 07:15
von AuE
Code??
Verfasst: 21. Januar 2009 13:25
von peter999
@nicmoe
Probier mal das:
Tabelle ableiten von QTableView
// Need to read from row, column to get data from table
QString PBTableView::getStringData(int row, int column) const
{
QModelIndex index = model()->index(row, column);
return model()->data(index, Qt::DisplayRole).toString();
}
int PBTableView::getIntData(int row, int column)
{
QModelIndex index = model()->index(row, column);
return model()->data(index, Qt::DisplayRole).toInt();
}
double PBTableView::getDoubleData(int row, int column)
{
QModelIndex index = model()->index(row, column);
return model()->data(index, Qt::DisplayRole).toDouble();
}
QTableWidget kannst Du nicht mit einem Modell beschicken, denn das hat schon ein eigenes eingebaut, besser ist immer die View/Data Kombination aus QTableView (ableiten) und einem Modell (das die Daten bereitstellt).
Gruß
Peter
Verfasst: 21. Januar 2009 20:19
von nicmoe
Hi,
also die Klasse funktioniert wunderbar. Das Problem ist, dass ich noch immer nicht direkt zugreifen kann.
Ich verstehe einfach nicht, wieso es für einen Fall wie meinen keine passende Klasse oder einfache Lösung gibt.
Verfasst: 21. Januar 2009 20:31
von franzf
^^ cool, den kompletten sourcecode von QT kopieren ist wohl um einiges aufwändiger als mal kurz in die examples schauen...
qt-src/examples
da gibts
1) itemviews
2) sql
Schau dir das mal in Ruhe an.
Vor allem das (relational)tablemodel. Doppelklick in die Zelle zum editieren, und noch kurz die passende editStrategy setzen und alles sollte passen.
Das ganze relational Beispiel hat samt main(), Erstellung der Tabelle, Kommentaren und 42 Zeilen Lizenzangaben gerade mal 118 Zeilen Länge. Incl. SQL-Tabelle editieren, und alles mit relationaler DB...
Grüße
Franz
Verfasst: 21. Januar 2009 21:57
von nicmoe
Hi,
also, ich glaube wir reden hier aneinander vorbei...
Was ich brauche ist folgendes: Ich suche nach einer Möglichkeit, die Funktionalität des QTableWidgets mit der SQL-kompatibiltät des QTableView zu vereinen zu einer einzigen super-Klasse. QTableWidget bringt alles mit was ich benötige, alle Signals, Slots und Methoden und ich kann sie einfach nicht nutzen
Warum besitzt QTableView nicht solche Möglichkeiten zur manipulation?
Verfasst: 21. Januar 2009 23:09
von franzf
Etwas Code wäre sicherlich an dieser Stelle nicht schlecht.
Und wegen den nicht vorhandenen SIGNALS, die QTableView angeblich nicht hat:
QTableView erbt von QAbstractItemView, und das hat sehr wohl SIGNALS, die dir mitteilen, auf welchen QModelIndex geclickt oder sonst was wurde.
Der index wiederum enthält Methoden zum Zugriff auf die Daten.
Wenn das immer noch nicht reicht, brauchen wir wirklich langsam etwas Code mit genauerer Beschreibung, was du wirklich anfangen willst, sonst werden wir weiterhin aneinander vorbei reden.
Grüße
Franz
Verfasst: 22. Januar 2009 14:06
von nicmoe
Hi,
danke für den Tipp mit dem QAbstractItemView. Ich habe bisher mit Borland C++ RAD Studio gearbeitet und war es deshalb gewöhnt, dass immer alle Methoden einer Klasse aufgelistet werden, ohne dass man sich Gedanken über die Eigenschaften der vererbenden Klassen machen muss.
Ich werde das gleich mal ausprobieren und sehen ob ichs hinkriege
