Dirty-Flag setzen
-
Flachkoepper
- Beiträge: 149
- Registriert: 11. Januar 2005 12:14
- Wohnort: Hannover
Dirty-Flag setzen
Mahlzeit,
wenn ich in einem Dialog mit 40 LineEdits, 17 ComboBoxen und noch diversen SpinBoxen ein dirty-Flag setzen will, wie mache ich das am elegantesten? Denn für jedes einzelne Widget eine SIGNAL-SLOT-Verbindung herzustellen, erscheint mir nicht besonders elegant...
Viele Grüße,
Flachkoepper
wenn ich in einem Dialog mit 40 LineEdits, 17 ComboBoxen und noch diversen SpinBoxen ein dirty-Flag setzen will, wie mache ich das am elegantesten? Denn für jedes einzelne Widget eine SIGNAL-SLOT-Verbindung herzustellen, erscheint mir nicht besonders elegant...
Viele Grüße,
Flachkoepper
Re: Dirty-Flag setzen
Das geschieht so oder so, ob Du es nun machst oder Qt spielt da keine große Rolle. Aber schau Dir mal QSignalMapper an, das erspart wenigstens einige Slots.Flachkoepper hat geschrieben:Denn für jedes einzelne Widget eine SIGNAL-SLOT-Verbindung herzustellen, erscheint mir nicht besonders elegant...
-
Flachkoepper
- Beiträge: 149
- Registriert: 11. Januar 2005 12:14
- Wohnort: Hannover
Danke für den Hinweis, aber ich habe das Gefühl, QSignalMapper ist in meinem Fall icht ganz das, was ich brauche. Ich habe das jetzt über findChildren gelöst:
Das spart mir wenigstens einiges an Tippserei.
Viele Grüße,
Flachkoepper
Code: Alles auswählen
QList<QLineEdit* > allLineEdits = findChildren<QLineEdit *>();
for( int i=0; i< allLineEdits.size(); ++i){
connect( allLineEdits.at(i), SIGNAL(textEdited(const QString&)), this, SLOT( setDirty() ) );
}
QList<QComboBox* > allComboBoxes = findChildren<QComboBox *>();
for( int i=0; i< allComboBoxes.size(); ++i){
connect( allComboBoxes.at(i), SIGNAL(currentIndexChanged(int) ), this, SLOT( setDirty() ) );
}Viele Grüße,
Flachkoepper
-
Flachkoepper
- Beiträge: 149
- Registriert: 11. Januar 2005 12:14
- Wohnort: Hannover
Da muss ich leider widersprechen. Es funktioniert, weil ich den Parameter des Signals im Slot nicht unbedingt verwenden muss. In diesem Fall kommt es schliesslich nur darauf an, DASS etwas geändert wurde und nicht WAS diese Änderung beinhaltet.Und funktioniert nicht weil Signal und Slot nicht parametergleich sind.
Viele Grüße,
Flachkoepper
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
macman hat Recht. Signal und Slot müssen die gleichen Parameter haben.Flachkoepper hat geschrieben:Da muss ich leider widersprechen. Es funktioniert, weil ich den Parameter des Signals im Slot nicht unbedingt verwenden muss. In diesem Fall kommt es schliesslich nur darauf an, DASS etwas geändert wurde und nicht WAS diese Änderung beinhaltet.Und funktioniert nicht weil Signal und Slot nicht parametergleich sind.
Viele Grüße,
Flachkoepper
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
Flachkoepper
- Beiträge: 149
- Registriert: 11. Januar 2005 12:14
- Wohnort: Hannover
Mal völlig dahingestellt, wer hier recht hat, von mir aus auch ihr. Aber mein Code oben funktioniert genau so wie er soll. Ich tippe irgendwas in die LineEdits und setDirty() wird ausgeführt. Erklärung?
/Edit: habe ich gerade in der Doku gefunden (4.0.1, Section Signals und Slots):
/Edit: habe ich gerade in der Doku gefunden (4.0.1, Section Signals und Slots):
FlachkoepperThe signals and slots mechanism is type safe: The signature of a signal must match the signature of the receiving slot.n fact a slot may have a shorter signature than the signal it receives because it can ignore extra arguments.)
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
Flachkoepper
- Beiträge: 149
- Registriert: 11. Januar 2005 12:14
- Wohnort: Hannover