Zugriff auf einzelne Zellen

Alles rund um die Programmierung mit Qt
Antworten
nicmoe
Beiträge: 18
Registriert: 8. November 2008 19:29
Kontaktdaten:

Zugriff auf einzelne Zellen

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
nicmoe
Beiträge: 18
Registriert: 8. November 2008 19:29
Kontaktdaten:

Beitrag von nicmoe »

Hi,

dankeschön. Ich werds mal versuchen und schauen ob's geht.
1+1=0;
nicmoe
Beiträge: 18
Registriert: 8. November 2008 19:29
Kontaktdaten:

Beitrag 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
1+1=0;
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Code??
peter999
Beiträge: 24
Registriert: 12. Januar 2006 11:28

Beitrag 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
nicmoe
Beiträge: 18
Registriert: 8. November 2008 19:29
Kontaktdaten:

Beitrag 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.
1+1=0;
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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
nicmoe
Beiträge: 18
Registriert: 8. November 2008 19:29
Kontaktdaten:

Beitrag 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?
1+1=0;
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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
nicmoe
Beiträge: 18
Registriert: 8. November 2008 19:29
Kontaktdaten:

Beitrag 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 ;)
1+1=0;
Antworten