Dirty-Flag setzen

Alles rund um die Programmierung mit Qt
Antworten
Flachkoepper
Beiträge: 149
Registriert: 11. Januar 2005 12:14
Wohnort: Hannover

Dirty-Flag setzen

Beitrag von Flachkoepper »

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
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Dirty-Flag setzen

Beitrag von macman »

Flachkoepper hat geschrieben:Denn für jedes einzelne Widget eine SIGNAL-SLOT-Verbindung herzustellen, erscheint mir nicht besonders elegant...
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
Beiträge: 149
Registriert: 11. Januar 2005 12:14
Wohnort: Hannover

Beitrag von Flachkoepper »

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:

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() ) );
}
Das spart mir wenigstens einiges an Tippserei.

Viele Grüße,
Flachkoepper
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Flachkoepper hat geschrieben:Das spart mir wenigstens einiges an Tippserei.
Und funktioniert nicht weil Signal und Slot nicht parametergleich sind.
Flachkoepper
Beiträge: 149
Registriert: 11. Januar 2005 12:14
Wohnort: Hannover

Beitrag von Flachkoepper »

Und funktioniert nicht weil Signal und Slot nicht parametergleich sind.
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.

Viele Grüße,
Flachkoepper
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Flachkoepper hat geschrieben:
Und funktioniert nicht weil Signal und Slot nicht parametergleich sind.
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.

Viele Grüße,
Flachkoepper
macman hat Recht. Signal und Slot müssen die gleichen Parameter haben.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Flachkoepper
Beiträge: 149
Registriert: 11. Januar 2005 12:14
Wohnort: Hannover

Beitrag von Flachkoepper »

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):
The signals and slots mechanism is type safe: The signature of a signal must match the signature of the receiving slot. (In fact a slot may have a shorter signature than the signal it receives because it can ignore extra arguments.)
Flachkoepper
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das hast du aber nochmal Glück gehabt... :)
Ist imho unsauber - ein anderes mal wundert man sich dann warum es nicht geht (wenn das signal weniger als der slot hat)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Flachkoepper
Beiträge: 149
Registriert: 11. Januar 2005 12:14
Wohnort: Hannover

Beitrag von Flachkoepper »

Darauf können wir uns einigen.

Viele Grüße,
Flachkoepper
Antworten