Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Configure QSettings ((QSettings::Format and QSettings::Scope )
Forum Updated to NodeBB v4.3 + New Features

Configure QSettings ((QSettings::Format and QSettings::Scope )

Scheduled Pinned Locked Moved Solved General and Desktop
15 Posts 7 Posters 1.4k Views 4 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.
  • H hbatalha

    I use QSettings in many places in my application so I want to use:

    QCoreApplication::setOrganizationName("MySoft"); 
    QCoreApplication::setOrganizationDomain("mysoft.com"); 
    QCoreApplication::setApplicationName("Star Runner");
    

    And then only use QSettings settings. But if I call the default constructor the default QSettings::Format and QSettings::Scope used is not what I want.

    I want to know if I can set QSettings::Format and QSettings::Scope just like I set the Organization Name beforehand?

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

    @hbatalha said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

    QCoreApplication::setOrganizationName("MySoft");
    QCoreApplication::setOrganizationDomain("mysoft.com");
    QCoreApplication::setApplicationName("Star Runner");

    Where exactly in your code do you execute this?

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

    H 1 Reply Last reply
    0
    • jsulmJ jsulm

      @hbatalha said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

      QCoreApplication::setOrganizationName("MySoft");
      QCoreApplication::setOrganizationDomain("mysoft.com");
      QCoreApplication::setApplicationName("Star Runner");

      Where exactly in your code do you execute this?

      H Offline
      H Offline
      hbatalha
      wrote on last edited by hbatalha
      #3

      @jsulm said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

      Where exactly in your code do you execute this?

      in the main.cpp

      int main(int argc, char *argv[])
      {
          QApplication a(argc, argv);
      
          QCoreApplication::setOrganizationName("MySoft");
          QCoreApplication::setOrganizationDomain("mysoft.com");
          QCoreApplication::setApplicationName("Star Runner");
      
      ...
      
      1 Reply Last reply
      0
      • VRoninV Offline
        VRoninV Offline
        VRonin
        wrote on last edited by VRonin
        #4

        Just subclass QSettings

        class MySettings : public QSettings{
            Q_OBJECT
            Q_DISABLE_COPY(MySettings)
        public:
            explicit MySettings(QObject *parent = nullptr)
                : QSettings(QSettings::IniFormat, QSettings::UserScope, 
        #ifdef Q_OS_DARWIN
                    QStringLiteral("mysoft.com")
        #else
                    QStringLiteral("MySoft")
        #endif
                    , QStringLiteral("Star Runner"), parent)
            {}
        };
        

        now use MySettings settings wherever you'd have used QSettings settings

        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
        ~Napoleon Bonaparte

        On a crusade to banish setIndexWidget() from the holy land of Qt

        kshegunovK 1 Reply Last reply
        3
        • VRoninV VRonin

          Just subclass QSettings

          class MySettings : public QSettings{
              Q_OBJECT
              Q_DISABLE_COPY(MySettings)
          public:
              explicit MySettings(QObject *parent = nullptr)
                  : QSettings(QSettings::IniFormat, QSettings::UserScope, 
          #ifdef Q_OS_DARWIN
                      QStringLiteral("mysoft.com")
          #else
                      QStringLiteral("MySoft")
          #endif
                      , QStringLiteral("Star Runner"), parent)
              {}
          };
          

          now use MySettings settings wherever you'd have used QSettings settings

          kshegunovK Offline
          kshegunovK Offline
          kshegunov
          Moderators
          wrote on last edited by kshegunov
          #5

          @VRonin said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

          Just subclass QSettings

          Ugh!
          Can't we have something like this instead?*

          QSettings mySettings()
          {
              return QSettings(QSettings::IniFormat, QSettings::UserScope, QStringLiteral(...));
          }
          

          *c++17 and later

          Use directly on initialization:

          QSettings settings = mySettings();
          

          Read and abide by the Qt Code of Conduct

          J.HilkJ 1 Reply Last reply
          2
          • VRoninV Offline
            VRoninV Offline
            VRonin
            wrote on last edited by
            #6

            @kshegunov said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

            Can't we have something like this instead?*

            Potato/Potatoe

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            kshegunovK 1 Reply Last reply
            0
            • VRoninV VRonin

              @kshegunov said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

              Can't we have something like this instead?*

              Potato/Potatoe

              kshegunovK Offline
              kshegunovK Offline
              kshegunov
              Moderators
              wrote on last edited by
              #7

              @VRonin said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

              Potato/Potatoe

              The point is to avoid type proliferation, I know you know that's a thing. Why derive anything if you don't have to; you're not changing any behavior here!

              Read and abide by the Qt Code of Conduct

              1 Reply Last reply
              0
              • kshegunovK kshegunov

                @VRonin said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

                Just subclass QSettings

                Ugh!
                Can't we have something like this instead?*

                QSettings mySettings()
                {
                    return QSettings(QSettings::IniFormat, QSettings::UserScope, QStringLiteral(...));
                }
                

                *c++17 and later

                Use directly on initialization:

                QSettings settings = mySettings();
                
                J.HilkJ Online
                J.HilkJ Online
                J.Hilk
                Moderators
                wrote on last edited by
                #8

                @kshegunov don't you still need a class for this, or do you advocate a global free floating function here?


                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.

                kshegunovK 1 Reply Last reply
                0
                • J.HilkJ J.Hilk

                  @kshegunov don't you still need a class for this, or do you advocate a global free floating function here?

                  kshegunovK Offline
                  kshegunovK Offline
                  kshegunov
                  Moderators
                  wrote on last edited by kshegunov
                  #9

                  @J-Hilk said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

                  @kshegunov don't you still need a class for this, or do you advocate a global free floating function here?

                  A normal C-like function, inline-d ideally. Why would you make a class for this?

                  Read and abide by the Qt Code of Conduct

                  SGaistS 1 Reply Last reply
                  1
                  • kshegunovK kshegunov

                    @J-Hilk said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

                    @kshegunov don't you still need a class for this, or do you advocate a global free floating function here?

                    A normal C-like function, inline-d ideally. Why would you make a class for this?

                    SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by SGaist
                    #10

                    @kshegunov you can't as QSettings is a QObject.

                    It does work with C++17, see @kshegunov answer below.

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

                    kshegunovK 1 Reply Last reply
                    0
                    • Chris KawaC Online
                      Chris KawaC Online
                      Chris Kawa
                      Lifetime Qt Champion
                      wrote on last edited by
                      #11

                      @hbatalha QSettings has static setDefaultFormat that you can call along those other set* functions, so the only part missing is the default scope, but it's not so bad I think?

                      QSettings settings(QSettings::SystemScope);
                      

                      It does feel like it would be kinda completing the API nicely if there was also something like static QSettings::setDefaultScope(QSettings::Scope). You could file a feature request on bugreports.qt.io if that's something you'd like to see in future versions.

                      H 1 Reply Last reply
                      3
                      • SGaistS SGaist

                        @kshegunov you can't as QSettings is a QObject.

                        It does work with C++17, see @kshegunov answer below.

                        kshegunovK Offline
                        kshegunovK Offline
                        kshegunov
                        Moderators
                        wrote on last edited by kshegunov
                        #12

                        @SGaist said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

                        @kshegunov you can't as QSettings is a QObject.

                        Au contraire mon ami! Excuse the bad friench, but the point is C++17 mandates RVO, so this compiles and runs correctly with g++. You don't make no copies here.

                        Read and abide by the Qt Code of Conduct

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

                          The French part is completely correct :-)
                          I missed the C++17 bits. My bad !

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

                          kshegunovK 1 Reply Last reply
                          1
                          • SGaistS SGaist

                            The French part is completely correct :-)
                            I missed the C++17 bits. My bad !

                            kshegunovK Offline
                            kshegunovK Offline
                            kshegunov
                            Moderators
                            wrote on last edited by
                            #14

                            @SGaist said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

                            The French part is completely correct :-)

                            Good that my initial (and rather inexcusable) error was caught on time ;)

                            Read and abide by the Qt Code of Conduct

                            1 Reply Last reply
                            1
                            • Chris KawaC Chris Kawa

                              @hbatalha QSettings has static setDefaultFormat that you can call along those other set* functions, so the only part missing is the default scope, but it's not so bad I think?

                              QSettings settings(QSettings::SystemScope);
                              

                              It does feel like it would be kinda completing the API nicely if there was also something like static QSettings::setDefaultScope(QSettings::Scope). You could file a feature request on bugreports.qt.io if that's something you'd like to see in future versions.

                              H Offline
                              H Offline
                              hbatalha
                              wrote on last edited by
                              #15

                              @Chris-Kawa said in Configure QSettings ((QSettings::Format and QSettings::Scope ):

                              QSettings has static setDefaultFormat that you can call along those other set* functions, so the only part missing is the default scope, but it's not so bad I think?

                              That's a good idea, I read it in the doc but misunderstood its role. I will try this approach and @kshegunov's answer and get back to you.

                              1 Reply Last reply
                              1

                              • Login

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