Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Installation and Deployment
  4. Using QSettings on Mac crashes on launch. Is there a fix?
Forum Updated to NodeBB v4.3 + New Features

Using QSettings on Mac crashes on launch. Is there a fix?

Scheduled Pinned Locked Moved Solved Installation and Deployment
qsettingsmaccrash
16 Posts 3 Posters 5.7k Views 1 Watching
  • 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.
  • S sandy.martel23

    You are using QSettings in a global variable. Move the initialisation inside the main().

    Looks like you are using a statically linked Qt, right ? Your QSettings is a global variable, QSettings implementation itself rely on other global variables. The order of initialisation of global variables is undefined.
    What could work, from worst to best:

    • shuffle the link order around to get QSettings globals initialised first (that would be a very fragile fix)
    • link Qt as a shared library, shared lib would be loaded and initialised before your code.
    • Don't build a QSettings as a global, replace it with a QSettings * and build it in main().
    C Offline
    C Offline
    Crossy
    wrote on last edited by
    #5

    @sandy.martel23 Thanks for your response. I'm going to see if the patch in the bug report fixes the error. If not this will be what I try next :) Just a quick question about it though (if that's ok) :)

    At the moment I've got globalsettings.cpp. In there is where I have 'QSettings settings' and then I refer to this object in some static functions which are in globalsettings.cpp. Example below:

    // globalsettings.cpp
    #include <QSettings>
    #include "globalsettings.h"
    
    // Initialise some variables from globalsettings.h.
    
    QSettings settings;
    
    void GlobalSettings::saveSetting(int day) // This function is defined statically in globalsettings.h.
    {
        settings.setValue("dayNumber", day);
    }
    

    In main.cpp I define the information needed for QCoreApplication which is why I haven't included app name etc as parameters in the QSettings object.

    So my question, is, where should I move the initialisation of the QSettings object, as unless I've misunderstood (possible because I'm a newbie), I can't have a main loop in globalsettings.cpp, and if I put it in the main loop in main.cpp, it won't be accessible. As I said, I may have totally misunderstood but would appreciate any clarification :)

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #6

      You don't need a global QSettings. Just create one when you need to either read or write a setting and be done with it.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      C S 2 Replies Last reply
      0
      • SGaistS SGaist

        You don't need a global QSettings. Just create one when you need to either read or write a setting and be done with it.

        C Offline
        C Offline
        Crossy
        wrote on last edited by
        #7

        @SGaist Thanks. I assume this means that the bug report was not related to my problem? Thanks for your help!

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #8

          The bug report was about a corrupted file which doesn't match your use case.

          All in all, since you have already built Qt with the patch applied, did you also test it for your use case ?

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          C 1 Reply Last reply
          0
          • SGaistS SGaist

            The bug report was about a corrupted file which doesn't match your use case.

            All in all, since you have already built Qt with the patch applied, did you also test it for your use case ?

            C Offline
            C Offline
            Crossy
            wrote on last edited by
            #9

            @SGaist Qt with the patch applied is still building ;( I tested the above with the original build I was using when I got the error and the program loaded with no problems. Thanks again for your help :)

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #10

              Still building ? What machine do you have ? What options did you pass to configure ?

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              C 1 Reply Last reply
              0
              • SGaistS SGaist

                Still building ? What machine do you have ? What options did you pass to configure ?

                C Offline
                C Offline
                Crossy
                wrote on last edited by Crossy
                #11

                @SGaist A 2011 Mac book pro. The reason it's still building because it failed about an hour in while I was out. So I'm building it again :)

                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #12

                  If you only need the core modules for your application, just build qtbase, that will save you lots of times

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  C 1 Reply Last reply
                  0
                  • SGaistS SGaist

                    If you only need the core modules for your application, just build qtbase, that will save you lots of times

                    C Offline
                    C Offline
                    Crossy
                    wrote on last edited by
                    #13

                    @SGaist Thanks - not sure if i did that or not, lol, but I'll do it next time as I'm only using the core modules :)

                    1 Reply Last reply
                    0
                    • SGaistS SGaist

                      You don't need a global QSettings. Just create one when you need to either read or write a setting and be done with it.

                      S Offline
                      S Offline
                      sandy.martel23
                      wrote on last edited by
                      #14

                      @Crossy said:

                      QSettings settings;

                      void GlobalSettings::saveSetting(int day) // This function is defined statically in globalsettings.h.
                      {
                      settings.setValue("dayNumber", day);
                      }

                      SGaist is right, the code should look like this:

                      void GlobalSettings::saveSetting(int day) // This function is defined statically in globalsettings.h.
                      {
                      QSettings settings; // <-- NOT a global
                      settings.setValue("dayNumber", day);
                      }

                      This is much better than your current implementation, since the destructor of QSettings will save/sync the preferences right away.
                      And if the global is really what is causing the problem, that would fix it.

                      C 1 Reply Last reply
                      0
                      • S sandy.martel23

                        @Crossy said:

                        QSettings settings;

                        void GlobalSettings::saveSetting(int day) // This function is defined statically in globalsettings.h.
                        {
                        settings.setValue("dayNumber", day);
                        }

                        SGaist is right, the code should look like this:

                        void GlobalSettings::saveSetting(int day) // This function is defined statically in globalsettings.h.
                        {
                        QSettings settings; // <-- NOT a global
                        settings.setValue("dayNumber", day);
                        }

                        This is much better than your current implementation, since the destructor of QSettings will save/sync the preferences right away.
                        And if the global is really what is causing the problem, that would fix it.

                        C Offline
                        C Offline
                        Crossy
                        wrote on last edited by
                        #15

                        @sandy.martel23 Thanks for your help :) It was the global causing the problem - after changing it to how you and SGaist suggested, it has worked :) Thank you!

                        1 Reply Last reply
                        0
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #16

                          Good !

                          Since everything is working now, please mark the thread as solved using the "Topic Tool" button so that other forum users may know a solution has been found :)

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - 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