Variablen an Funktion übergeben
-
Moin Leute,
Ich bin ganz neu angefangen mit QT und C++, habe aber schon einige C Kenntnisse.
Nun zu meiner Frage:Ich wollte gerne diesen Code in eine Funktion ablegen:
switch (RMD) { case 0: ui->ReleaseMoverDriveFrame->setStyleSheet("background: lightgreen; border: none !important; border-radius: 5px"); RMD++; break; case 1: ui->ReleaseMoverDriveFrame->setStyleSheet("background: grey; border: none !important; border-radius: 5px; "); RMD=0; break; }
Dabei ist RMD eine Normale int Variable und sollte beim Aufrufen der Funktion mit angegeben werden, wobei aber bei jedem Aufruf eine andere, vorher deklarierte Variable genutzt werden soll. Zusätzlich ist das ReleseMoverDriveFrame ein QFrame, welches auch bei jedem aufrufen der Funktion mit angegeben werden sollte.
Danke für jede Hilfe!
-
hi @Jakobm789 und willkommen!
Wie weit gehen denn deine C-Kenntnisse ? Weil eine Funktion mit Argumenten erstellen ist in c++ nicht viel anders als in c
-
Moin, die Int Variable zu übergeben ist nicht das Problem denke ich, nur weiß ich nicht wie ich das QFrame übergeben muss, ob als Pointer oder irgendwie anders? Ich würde es vom Gefühl her irgendwie so machen :
void testcpp::switchcase(int var, QFrame *frame){ switch (var) { case 0: *frame->setStyleSheet("background: lightgreen; border: none !important; border-radius: 5px"); var++; break; case 1: *frame->setStyleSheet("background: grey; border: none !important; border-radius: 5px; "); var=0; break; } }
Aber das Funktioniert so scheinbar nicht.
-
@Jakobm789 jup, sieht gut, aus lediglich der extra deref
*
in *frame->setStyleSheet ist unnötig, dafür ist ja der->
operator da 😉 -
var++; und var = 0; kannst Du Dir auch sparen. var wird als Wert und nicht als Referenz übergeben, damit ist der geänderte Wert von var nur innerhalb der Funktion gültig.
Mit anderen Worten, var hat beim Aufruf der Funktion switchcase() immer den Wert der beim Aufruf übergegen wird. -
@Jakobm789 im Prinzip hast du 3 Möglichkeiten
- du änderst den Returnwert von void nach int und gibts den modifizierten wert zurück
- du legst
var
als Klassen-Member-Variable an (Definierung in *h) dann ist sie überall in der Klasse verfügbar - du übergibst den int als Referenz
void switchcase(int &var, QFrame *frame)
Ich bin sicher es gibt noch mehr, aber as sind die 3 Möglichkeiten, die mir gerade so in den Kopf kommen.