Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Globale Variablen mit Static, oder bessere Alternative?
QtWS25 Last Chance

Globale Variablen mit Static, oder bessere Alternative?

Scheduled Pinned Locked Moved Unsolved German
10 Posts 7 Posters 897 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.
  • F Offline
    F Offline
    Freakonaleash
    wrote on last edited by
    #1

    Guten Tag,

    ich habe aktuell ein Problem welches bereits häufiger in Foren thematisiert wurde, allerdings kann ich die Lösungen nicht auf meinen Fall übertragen.
    Ich habe eine Klasse "globalValues" erstellt, in der aus einer Datei Werte für Variablen gelesen werden. Diese Werte benötige ich in allen meiner anderen Klasse, so dass ich in jeder Klasse eine Instanz der Klasse "globalValues" erzeuge. Hier mein Code:

    class globalValues
    {
    public:
        globalValues();
    
        QString iniPath="globalValues.ini";
    
        int var1=10;
        int var2=20;
        int var3=30;
        int var4=40;
    
        void load_configfile();
    };
    
    
    
    globalValues::globalValues()
    {
        load_configfile();
    }
    
    void globalValues::load_configfile()
    {
        qDebug() << "load_config";
    
        QFile file(iniPath);
        if(!file.exists()){		//Datei wird erstellt wenn sie nicht existiert
            QSettings settings(iniPath,QSettings::IniFormat);
            settings.setValue("var1",var1);
            settings.setValue("var2",var2);
            settings.setValue("var3",var3);
            settings.setValue("var4",var4);
        }
    
    
        QSettings settings(iniPath,QSettings::IniFormat);
        var 1= settings.value("var1").toInt();
        var 2= settings.value("var2").toInt();
        var 3= settings.value("var3").toInt();
        var 4= settings.value("var4").toInt();
    }
    

    Den Zugriff auf die Variablen bekomme ich dann über:

    globalValues values;
    int x = values.var1;
    

    Ich weiß, das macht man normal mit "getter-Funktionen", aber das sollte jetzt nicht das Thema sein.

    Mein Problem ist: Das Ganze funktioniert zwar, aber finde ich irgendwie unschön, da meine .ini-Datei bei jeder Instanz neu geladen wird, d.h. z.B. bei meinem Programmstart wird die Datei insgesammt 15mal geladen.
    Ich könnte jetzt natülich auch mit Pointern und Referenzen arbeiten, die ich dann an die anderen Klassen übergebe, aber auch das finde ich nicht so wirklich elegant.

    Ich habe nun das keyword "static" entdeckt, mit dem man solche Variablen über alle Instanzen der Klasse "globalValues" gleich halten kann. Mein Problem ist nur, dass ich die Wertezuweisung außerhalb der Klasse "globalValues" machen müsste. Also die "load_configfile()"-Funktion müsste ich woanders unterbringen und die Werte beim Programmstart mit "int globalValues::var1 = XXX" zuweisen, wobei XXX natürlich der aus der .ini geladene Wert ist.
    Theoretisch sollte das möglich sein, auch wenn ich es noch nicht getestet habe. Allerdings frage ich mich, ob es nicht noch schöner geht? Kann ich die Wertezuweisung nicht doch irgendwie in der Klasse "globalValues" direkt machen?
    Wie würdet ihr sowas lösen? Vielleicht mit einem ganz anderem Weg?

    Vielen Dank und ein schönes Wochenende!

    1 Reply Last reply
    0
    • Christian EhrlicherC Offline
      Christian EhrlicherC Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Wenn eine Klasse in anderen Klassen benötigt wird, übergib einen Pointer der Klasse dort wo Du sie brauchst.

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      1 Reply Last reply
      1
      • D Offline
        D Offline
        django.Reinhard
        wrote on last edited by
        #3

        Hi,

        bei Fragen bezüglich Sprache und Entwurfsmöglichkeiten empfehle ich die Lektüre der Richtlinien des Meisters.

        Ist zwar auf English, aber es wird nicht nur beschrieben, was man nicht tun soll, sondern auch erklärt, wie man es besser macht.

        F 1 Reply Last reply
        0
        • D django.Reinhard

          Hi,

          bei Fragen bezüglich Sprache und Entwurfsmöglichkeiten empfehle ich die Lektüre der Richtlinien des Meisters.

          Ist zwar auf English, aber es wird nicht nur beschrieben, was man nicht tun soll, sondern auch erklärt, wie man es besser macht.

          F Offline
          F Offline
          Freakonaleash
          wrote on last edited by Freakonaleash
          #4

          @django-Reinhard wow, super. Vielen Dank für die Webseite. Da werde ich einige Monate brauchen bis ich da durch bin und alles verstanden habe. Aber nützlich in jedem Fall.

          Trotzdem nochmal zu meinem Fallbeispiel.
          Seht ihr grundsätzlich ein Problem oder eine Gefahr, dass die .ini-datei immer wieder geladen werden muss? Wie gesagt, in jeder meiner Klasse erzeuge ich ein neues objekt global-values, d.h. die ini wird immer wieder geladen. Bei Programmstart ca.15mal und während der Nutzung je nach Userverhalten immer mal wieder. Die .ini liegt lokal, also immer verfügbar.
          Könnte es trotzdem problematisch werden?
          Ich bin mir fast sicher, auf der Webseite steht irgendwo, dass man sowas nicht macht. Aber die Frage ist, ob es zu Problemen führen kann. (Z.B. lesefehler, gleichzeitiger Zugriff oder irgendsowas....) Wie gesagt, in der Praxis hat es bisher geklappt, aber das heißt ja nicht, dass trotzdem irgendwas passieren könnte)

          Pl45m4P J.HilkJ 2 Replies Last reply
          0
          • F Freakonaleash

            @django-Reinhard wow, super. Vielen Dank für die Webseite. Da werde ich einige Monate brauchen bis ich da durch bin und alles verstanden habe. Aber nützlich in jedem Fall.

            Trotzdem nochmal zu meinem Fallbeispiel.
            Seht ihr grundsätzlich ein Problem oder eine Gefahr, dass die .ini-datei immer wieder geladen werden muss? Wie gesagt, in jeder meiner Klasse erzeuge ich ein neues objekt global-values, d.h. die ini wird immer wieder geladen. Bei Programmstart ca.15mal und während der Nutzung je nach Userverhalten immer mal wieder. Die .ini liegt lokal, also immer verfügbar.
            Könnte es trotzdem problematisch werden?
            Ich bin mir fast sicher, auf der Webseite steht irgendwo, dass man sowas nicht macht. Aber die Frage ist, ob es zu Problemen führen kann. (Z.B. lesefehler, gleichzeitiger Zugriff oder irgendsowas....) Wie gesagt, in der Praxis hat es bisher geklappt, aber das heißt ja nicht, dass trotzdem irgendwas passieren könnte)

            Pl45m4P Offline
            Pl45m4P Offline
            Pl45m4
            wrote on last edited by
            #5

            @Freakonaleash said in Globale Variablen mit Static, oder bessere Alternative?:

            Wie gesagt, in jeder meiner Klasse erzeuge ich ein neues objekt global-values, d.h. die ini wird immer wieder geladen. Bei Programmstart ca.15mal und während der Nutzung je nach Userverhalten immer mal wieder. Die .ini liegt lokal, also immer verfügbar.
            Könnte es trotzdem problematisch werden?
            Ich bin mir fast sicher, auf der Webseite steht irgendwo, dass man sowas nicht macht

            Wieso lädst du sie dann nicht nur einmal und übergibst den Pointer an deine Klassen (so wie @Christian-Ehrlicher vorher schon gesagt hat)?

            @Freakonaleash said in Globale Variablen mit Static, oder bessere Alternative?:

            Ich könnte jetzt natülich auch mit Pointern und Referenzen arbeiten, die ich dann an die anderen Klassen übergebe, aber auch das finde ich nicht so wirklich elegant.
            Ich habe nun das keyword "static" entdeckt

            Pointer sind nicht elegant, aber static erscheint es dir? :o)


            If debugging is the process of removing software bugs, then programming must be the process of putting them in.

            ~E. W. Dijkstra

            1 Reply Last reply
            1
            • F Freakonaleash

              @django-Reinhard wow, super. Vielen Dank für die Webseite. Da werde ich einige Monate brauchen bis ich da durch bin und alles verstanden habe. Aber nützlich in jedem Fall.

              Trotzdem nochmal zu meinem Fallbeispiel.
              Seht ihr grundsätzlich ein Problem oder eine Gefahr, dass die .ini-datei immer wieder geladen werden muss? Wie gesagt, in jeder meiner Klasse erzeuge ich ein neues objekt global-values, d.h. die ini wird immer wieder geladen. Bei Programmstart ca.15mal und während der Nutzung je nach Userverhalten immer mal wieder. Die .ini liegt lokal, also immer verfügbar.
              Könnte es trotzdem problematisch werden?
              Ich bin mir fast sicher, auf der Webseite steht irgendwo, dass man sowas nicht macht. Aber die Frage ist, ob es zu Problemen führen kann. (Z.B. lesefehler, gleichzeitiger Zugriff oder irgendsowas....) Wie gesagt, in der Praxis hat es bisher geklappt, aber das heißt ja nicht, dass trotzdem irgendwas passieren könnte)

              J.HilkJ Offline
              J.HilkJ Offline
              J.Hilk
              Moderators
              wrote on last edited by
              #6

              @Freakonaleash Auch auf die Gefahr hin, dass du das Falsche aus diesem Ratschlag lernst, In C++ gibt es das Prinzip der "Singleton's".
              Prinzipiell genauso ungern gesehen wie Globale Variablen. Aber sie haben ihren Platz und Verwendungszweck.


              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
              0
              • HoMaH Offline
                HoMaH Offline
                HoMa
                wrote on last edited by
                #7

                Gibt es das nicht? Was spricht gegen QSettings?

                jsulmJ 1 Reply Last reply
                0
                • HoMaH HoMa

                  Gibt es das nicht? Was spricht gegen QSettings?

                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #8

                  @HoMa said in Globale Variablen mit Static, oder bessere Alternative?:

                  Gibt es das nicht?

                  Was?

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  HoMaH 1 Reply Last reply
                  0
                  • jsulmJ jsulm

                    @HoMa said in Globale Variablen mit Static, oder bessere Alternative?:

                    Gibt es das nicht?

                    Was?

                    HoMaH Offline
                    HoMaH Offline
                    HoMa
                    wrote on last edited by
                    #9

                    @jsulm achso ... ja - also was der "Freakonaleash" ganz oben fragt: eine Möglichkeit Konfiguration zentral abzulegen ohne selbst ein Globales Objekt behandeln zu müssen oder sich um File I/O zu kümmern.

                    jsulmJ 1 Reply Last reply
                    0
                    • HoMaH HoMa

                      @jsulm achso ... ja - also was der "Freakonaleash" ganz oben fragt: eine Möglichkeit Konfiguration zentral abzulegen ohne selbst ein Globales Objekt behandeln zu müssen oder sich um File I/O zu kümmern.

                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by
                      #10

                      @HoMa Siehe was @J-Hilk vorgeschlagen hat (Singleton).
                      QSettings kann natürlich benutzt werden, wenn Settings dauerhaft gespeichert werden sollen.

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0

                      • Login

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