Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Variablen an Funktion übergeben
Forum Updated to NodeBB v4.3 + New Features

Variablen an Funktion übergeben

Scheduled Pinned Locked Moved Solved German
9 Posts 3 Posters 1.6k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    Jakobm789
    wrote on 6 Oct 2020, 09:11 last edited by
    #1

    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!

    J 1 Reply Last reply 6 Oct 2020, 09:20
    0
    • J Jakobm789
      6 Oct 2020, 09:11

      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!

      J Offline
      J Offline
      J.Hilk
      Moderators
      wrote on 6 Oct 2020, 09:20 last edited by
      #2

      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


      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


      Q: What's that?
      A: It's blue light.
      Q: What does it do?
      A: It turns blue.

      1 Reply Last reply
      1
      • J Offline
        J Offline
        Jakobm789
        wrote on 6 Oct 2020, 09:34 last edited by Jakobm789 10 Jun 2020, 09:41
        #3

        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.

        J 1 Reply Last reply 6 Oct 2020, 09:49
        1
        • J Jakobm789
          6 Oct 2020, 09:34

          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.

          J Offline
          J Offline
          J.Hilk
          Moderators
          wrote on 6 Oct 2020, 09:49 last edited by
          #4

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


          Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


          Q: What's that?
          A: It's blue light.
          Q: What does it do?
          A: It turns blue.

          J 1 Reply Last reply 6 Oct 2020, 09:52
          1
          • J J.Hilk
            6 Oct 2020, 09:49

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

            J Offline
            J Offline
            Jakobm789
            wrote on 6 Oct 2020, 09:52 last edited by
            #5

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

            1 Reply Last reply
            0
            • A Offline
              A Offline
              ad1170
              wrote on 6 Oct 2020, 09:57 last edited by ad1170 10 Jun 2020, 09:58
              #6

              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.

              J 1 Reply Last reply 6 Oct 2020, 10:01
              2
              • A ad1170
                6 Oct 2020, 09:57

                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.

                J Offline
                J Offline
                Jakobm789
                wrote on 6 Oct 2020, 10:01 last edited by
                #7

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

                J 1 Reply Last reply 6 Oct 2020, 10:06
                0
                • J Jakobm789
                  6 Oct 2020, 10:01

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

                  J Offline
                  J Offline
                  J.Hilk
                  Moderators
                  wrote on 6 Oct 2020, 10:06 last edited by
                  #8

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


                  Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                  Q: What's that?
                  A: It's blue light.
                  Q: What does it do?
                  A: It turns blue.

                  J 1 Reply Last reply 6 Oct 2020, 10:45
                  3
                  • J J.Hilk
                    6 Oct 2020, 10:06

                    @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 Offline
                    J Offline
                    Jakobm789
                    wrote on 6 Oct 2020, 10:45 last edited by
                    #9

                    @J-Hilk Nochmals vielen Dank!

                    1 Reply Last reply
                    1

                    2/9

                    6 Oct 2020, 09:20

                    topic:navigator.unread, 7
                    • Login

                    • Login or register to search.
                    2 out of 9
                    • First post
                      2/9
                      Last post
                    0
                    • Categories
                    • Recent
                    • Tags
                    • Popular
                    • Users
                    • Groups
                    • Search
                    • Get Qt Extensions
                    • Unsolved