Signal/Slot bei QTable mit valueChanged

Alles rund um die Programmierung mit Qt
Antworten
GeorgGentoo
Beiträge: 6
Registriert: 13. Dezember 2004 23:09
Wohnort: DE / Karlsruhe

Signal/Slot bei QTable mit valueChanged

Beitrag von GeorgGentoo »

Hi,

ich habe für eine Tabelle QTable folgenden Connect erstellt:

connect( myTable, SIGNAL( valueChanged(int, int) ) , this, SLOT( autoExpand(int, int) ));


der SLOT autoExpand wird weiter unten implementiert.
Nun ist es ja bei dem SIGNAL valueChanged so, dass als Parameter nur (int col, int row) übergeben werden.

Ich habe in meiner Anwendung allerdings zwei verschiedene Tabellen und möchte meine SLOT-Funktion autoExpand nur EINMAL schreiben, d.h. ich suche nach einer Möglichkeit, unabhängig vom Sender diese Funktion zu schreiben.
Konkret: Die Funktion soll Werte in einer Tabelle selbständig ändern, aber dazu muss sie ja erstmal wissen, in WELCHER Tabelle sie dies tun kann: Aber es wird ja durch das SIGNAL kein Pointer auf eine Tabelle weitergegeben.


Was also passieren soll ist dieses:

void autoExpand (int col, int row) {
table = Die Tabelle, von der das Signal emitiert wurde
table->setItem(row, col, item) bzw. table->setText(row, col, QString)
}


Ich hoffe, ihr konntet mir folgen. 8)

Wie kann ich mein Problem am besten lösen?
Wie sähe eine geeignete SLOT/SIGNAL-Funktion aus?

Vielen Dank!
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

Hallo

Es gibt unter QObject ein Function sender die dir einen Pointer auf den Sender liefert
http://doc.trolltech.com/3.3/qobject.html#sender

damit solltest du dann in deinem Slot testen könne von welchem Object also konkret von welcher Tabelle dein Signal kommt, aber vorsicht ruftst du die Funktion normal auf ohne Signal dann ist der Sender nicht definiert


gandalf

p.s benutz bitte für code die Code Tags macht das alles etwas übersichtlicher[/url]
benutzte QT 3.2 nc auf w2k
GeorgGentoo
Beiträge: 6
Registriert: 13. Dezember 2004 23:09
Wohnort: DE / Karlsruhe

Beitrag von GeorgGentoo »

Hallo gandalf,

danke für Deine Antwort, ich glaube, genau nach so einer Funktion habe ich gesucht!

Nun habe ich innerhalb meiner Slot-Funktion folgende Zeile untergebracht:

Code: Alles auswählen

const QObject *sender = QObject::sender();
... diese ist zunächst syntaktisch korrekt, jedoch gibt's beim Kompilieren einen Fehler, weil meine Funktionen, die ich über dem sender ausführen möchte, "natürlich" nicht gefunden werden können:

Code: Alles auswählen

sender->setText(i,j, "foo")
Wie ist das richtig zu stellen?

Danke :-)[/code]
miketech
Beiträge: 125
Registriert: 3. August 2004 11:19

Beitrag von miketech »

Hi Georg,

versuch mal:

QTable *myTable = (QTable *)sender();

(o.ä.)

Da sender() nur einen Pointer auf ein Object vom Typ QObject liefert, stehen Dir nicht die entsprechenden Methoden zur Verfügung. Ein Cast, wie oben könnte daher helfen.

Gruß

Mike
GeorgGentoo
Beiträge: 6
Registriert: 13. Dezember 2004 23:09
Wohnort: DE / Karlsruhe

Beitrag von GeorgGentoo »

so, klappt's!
100 Punkte! :)
Antworten