Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

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!


  • Moderators

    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.


  • Moderators

    @Jakobm789 jup, sieht gut, aus lediglich der extra deref * in *frame->setStyleSheet ist unnötig, dafür ist ja der -> operator da 😉



  • @J-Hilk Jap, Funktioniert, vielen Dank für die schnelle Hilfe!



  • 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.



  • @ad1170 Kann ich das irgendwie umgehen, da ich den Wert auch außerhalb der Funktion benötige?


  • Moderators

    @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.



  • @J-Hilk Nochmals vielen Dank!


Log in to reply