Kurze Frage
-
Hallo,
wie kann man dieses Beispiel(aus wikipedia) so umändern, dass a immer um 1 größer ist als b? Außerdem soll auch nach b.setzeWert(23) der korrekte wert von 22 bei a gesetzt werden.
// Zahl.h #include <QObject> class Zahl : public QObject { Q_OBJECT private: int wert; public: Zahl() : wert(0) { } int wertLesen() const { return wert; } public slots: void setzeWert(int wert) { if (wert != this->wert) { this->wert = wert; emit wertGeaendert(wert); } } signals: void wertGeaendert(int neuerWert); }; // main.cpp #include <Zahl.h> int main(void) { Zahl a, b; // a.wertLesen() == 0, b.wertLesen() == 0 a.setzeWert(5); // a.wertLesen() == 5, b.wertLesen() == 0 b.setzeWert(48); // a.wertLesen() == 5, b.wertLesen() == 48 QObject::connect(&a, SIGNAL( wertGeaendert(int) ), &b, SLOT( setzeWert(int) ) ); a.setzeWert(12); // a.wertLesen() == 12, b.wertLesen() == 12 b.setzeWert(23); // a.wertLesen() == 12, b.wertLesen() == 23 }
Danke!
-
Indem du nachdenkst
Du weißt vorher noch nicht, welche Zahl jetzt "a" und welche "b" heißt. Somit ist es nicht möglich das automatisiert hinzubiegen. Dies wiederum bedeutet für dich dass du zwei neue Methoden (als SLOTS) brauchst: decrement und increment.void Zahl::increment(int zahl) wert = zahl-1; } void Zahl::decrement(int zahl) { wert = zahl+1; }
Jetzt müssen wir nur noch richtig connecten:
Dazu die ganze main:
int main(void) { Zahl a, b; // a.wertLesen() == 0, b.wertLesen() == 0 a.setzeWert(5); // a.wertLesen() == 5, b.wertLesen() == 0 b.setzeWert(48); // a.wertLesen() == 5, b.wertLesen() == 48 // QObject::connect(&a, SIGNAL( wertGeaendert(int) ), &b, SLOT( setzeWert(int) ) ); Das können wir ja nicht mehr gebrauchen, oder? QObject::connect(&a, SIGNAL( wertGeaendert(int) ), &b, SLOT( decrement(int) ) ); QObject::connect(&b, SIGNAL( wertGeaendert(int) ), &a, SLOT( increment(int) ) ); a.setzeWert(12); // a.wertLesen() == 12, b.wertLesen() == 11 b.setzeWert(23); // a.wertLesen() == 24, b.wertLesen() == 23 }