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. Saving QByteArray to text similar to QSettings' format in ini file?
Forum Updated to NodeBB v4.3 + New Features

Saving QByteArray to text similar to QSettings' format in ini file?

Scheduled Pinned Locked Moved Solved General and Desktop
14 Posts 3 Posters 1.5k Views 2 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.
  • L Offline
    L Offline
    lansing
    wrote on last edited by
    #1

    In QSettings, a saved QByteArray would be like this in text:

    @ByteArray(\0\0\0\x2\0\0\0\x3\0\0 #\0\0\0\x2\0\0\0\0\0\0\0)
    

    How do I do this without going through QSettings?

    I have a QTextstream writing to a QString, and the string will be saved to a text file at the end. How do I convert the QByteArray so that it's saving in this format?

    QString m_storedText;
    QTextStream out(&m_storedText);
    
    out << "hi ";
    out << QByteArray(QColor(Qt::yellow));
    
    jsulmJ L 2 Replies Last reply
    0
    • L lansing

      In QSettings, a saved QByteArray would be like this in text:

      @ByteArray(\0\0\0\x2\0\0\0\x3\0\0 #\0\0\0\x2\0\0\0\0\0\0\0)
      

      How do I do this without going through QSettings?

      I have a QTextstream writing to a QString, and the string will be saved to a text file at the end. How do I convert the QByteArray so that it's saving in this format?

      QString m_storedText;
      QTextStream out(&m_storedText);
      
      out << "hi ";
      out << QByteArray(QColor(Qt::yellow));
      
      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @lansing Why do you want to store in unreadable binary format? Ini files should be normal text files which can be read by humans.

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

      1 Reply Last reply
      0
      • L lansing

        In QSettings, a saved QByteArray would be like this in text:

        @ByteArray(\0\0\0\x2\0\0\0\x3\0\0 #\0\0\0\x2\0\0\0\0\0\0\0)
        

        How do I do this without going through QSettings?

        I have a QTextstream writing to a QString, and the string will be saved to a text file at the end. How do I convert the QByteArray so that it's saving in this format?

        QString m_storedText;
        QTextStream out(&m_storedText);
        
        out << "hi ";
        out << QByteArray(QColor(Qt::yellow));
        
        L Offline
        L Offline
        lansing
        wrote on last edited by
        #3

        @lansing

        I want to save settings like QFont but storing its values separately seem unnecessary. Because when I load it back I would have to reconstruct it from all those values again before it's ready to use. So I think it would be easier to just wrap it in QByteArray for saving and retrieving.

        jsulmJ 2 Replies Last reply
        0
        • L lansing

          @lansing

          I want to save settings like QFont but storing its values separately seem unnecessary. Because when I load it back I would have to reconstruct it from all those values again before it's ready to use. So I think it would be easier to just wrap it in QByteArray for saving and retrieving.

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

          @lansing I'm not sure I follow: do you want to store memory dump of an object (like QFont instance) as binary data in ini files?! In my opinion you should rethink this approach:

          • This is unreadable for user
          • This is unchangeable by user
          • This is most probably not going to work because of internal d pointer used by Qt classes to hide internal implementation. Also endianess and memory alignment needs to be considered...

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

          1 Reply Last reply
          0
          • L lansing

            @lansing

            I want to save settings like QFont but storing its values separately seem unnecessary. Because when I load it back I would have to reconstruct it from all those values again before it's ready to use. So I think it would be easier to just wrap it in QByteArray for saving and retrieving.

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

            @lansing You should check documentation: https://doc-snapshots.qt.io/qt5-dev/qfont.html
            "If you want to store a user's font preferences you could use QSettings, writing the font information with toString() and reading it back with fromString(). The operator<<() and operator>>() functions are also available, but they work on a data stream."
            There is really no need for binary data.

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

            L 1 Reply Last reply
            3
            • jsulmJ jsulm

              @lansing You should check documentation: https://doc-snapshots.qt.io/qt5-dev/qfont.html
              "If you want to store a user's font preferences you could use QSettings, writing the font information with toString() and reading it back with fromString(). The operator<<() and operator>>() functions are also available, but they work on a data stream."
              There is really no need for binary data.

              L Offline
              L Offline
              lansing
              wrote on last edited by
              #6

              @jsulm

              I want to store a list of font as selection. User can add or remove font preference to this file

              [theme one]
              id_1 ; font-setting ; other stuff
              [theme two]
              id_2; font-setting; ...
              

              I don't think QSettings is right for this case?

              I also tried the operator<<() to store them separately as font family, font size etc but I have to reconstruct them back together when I loaded them, which is tedious.

              jsulmJ 1 Reply Last reply
              0
              • L lansing

                @jsulm

                I want to store a list of font as selection. User can add or remove font preference to this file

                [theme one]
                id_1 ; font-setting ; other stuff
                [theme two]
                id_2; font-setting; ...
                

                I don't think QSettings is right for this case?

                I also tried the operator<<() to store them separately as font family, font size etc but I have to reconstruct them back together when I loaded them, which is tedious.

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

                @lansing said in Saving QByteArray to text similar to QSettings' format in ini file?:

                but I have to reconstruct them back together

                Why? fromString() should do it just fine if you stored it before using toString() as described in the documentation.

                "I want to store a list of font as selection" - you could construct this list by yourself calling toString() on each font and joining these strings into one using a separator. Later, when loading, just read the string from settings split it using the separator and use fromString() for each font. This is not that much work.

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

                L 1 Reply Last reply
                0
                • jsulmJ jsulm

                  @lansing said in Saving QByteArray to text similar to QSettings' format in ini file?:

                  but I have to reconstruct them back together

                  Why? fromString() should do it just fine if you stored it before using toString() as described in the documentation.

                  "I want to store a list of font as selection" - you could construct this list by yourself calling toString() on each font and joining these strings into one using a separator. Later, when loading, just read the string from settings split it using the separator and use fromString() for each font. This is not that much work.

                  L Offline
                  L Offline
                  lansing
                  wrote on last edited by
                  #8

                  @jsulm said in Saving QByteArray to text similar to QSettings' format in ini file?:

                  fromString

                  Oh I don't know that we can do that. What is the syntax of fromString() when reading back from the text?

                  jsulmJ 1 Reply Last reply
                  0
                  • L lansing

                    @jsulm said in Saving QByteArray to text similar to QSettings' format in ini file?:

                    fromString

                    Oh I don't know that we can do that. What is the syntax of fromString() when reading back from the text?

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

                    @lansing said in Saving QByteArray to text similar to QSettings' format in ini file?:

                    What is the syntax of fromString() when reading back from the text?

                    There is documentation: https://doc.qt.io/qt-5/qfont.html#fromString

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

                    L 1 Reply Last reply
                    1
                    • jsulmJ jsulm

                      @lansing said in Saving QByteArray to text similar to QSettings' format in ini file?:

                      What is the syntax of fromString() when reading back from the text?

                      There is documentation: https://doc.qt.io/qt-5/qfont.html#fromString

                      L Offline
                      L Offline
                      lansing
                      wrote on last edited by
                      #10

                      @jsulm

                      Yes I read it, this is what I got so far

                      QFont preferenceFont;               
                      preferenceFont.fromString(fontString);
                      

                      Is there a one liner for this? I tried QFont::fromString(fontString) but it doesn't work.

                      jsulmJ J.HilkJ 2 Replies Last reply
                      0
                      • L lansing

                        @jsulm

                        Yes I read it, this is what I got so far

                        QFont preferenceFont;               
                        preferenceFont.fromString(fontString);
                        

                        Is there a one liner for this? I tried QFont::fromString(fontString) but it doesn't work.

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

                        @lansing said in Saving QByteArray to text similar to QSettings' format in ini file?:

                        I tried QFont::fromString(fontString) but it doesn't work.

                        Of course it does not since fromString() is not static.
                        Why do you need one liner?

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

                        L 1 Reply Last reply
                        4
                        • L lansing

                          @jsulm

                          Yes I read it, this is what I got so far

                          QFont preferenceFont;               
                          preferenceFont.fromString(fontString);
                          

                          Is there a one liner for this? I tried QFont::fromString(fontString) but it doesn't work.

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

                          @lansing

                          int main(int argc, char *argv[])
                          {
                              QApplication app(argc, argv);
                          
                              QFont defaultFont;
                              qDebug() << defaultFont;
                              defaultFont.setPixelSize(25);
                              defaultFont.setBold(true);
                              qDebug() << defaultFont;
                              QString stringRepresentation = defaultFont.toString();
                              qDebug() << stringRepresentation;
                              QFont loadedFont;
                              loadedFont.fromString(stringRepresentation);
                          
                              qDebug() << defaultFont << loadedFont;
                          //    return app.exec();
                          }
                          

                          output:

                          QFont( ".AppleSystemUIFont,13,-1,5,50,0,0,0,0,0" )
                          QFont( ".AppleSystemUIFont,-1,25,5,75,0,0,0,0,0" )
                          ".AppleSystemUIFont,-1,25,5,75,0,0,0,0,0"
                          QFont( ".AppleSystemUIFont,-1,25,5,75,0,0,0,0,0" ) QFont( ".AppleSystemUIFont,-1,25,5,75,0,0,0,0,0" )
                          

                          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
                          3
                          • jsulmJ jsulm

                            @lansing said in Saving QByteArray to text similar to QSettings' format in ini file?:

                            I tried QFont::fromString(fontString) but it doesn't work.

                            Of course it does not since fromString() is not static.
                            Why do you need one liner?

                            L Offline
                            L Offline
                            lansing
                            wrote on last edited by
                            #13

                            @jsulm

                            I will be passing it as an argument after the conversion, so it would be shorter to do it in one line instead of three.

                            QFont preferenceFont;               
                            preferenceFont.fromString(fontString);
                            document->setFont(preferenceFont)
                            
                            J.HilkJ 1 Reply Last reply
                            0
                            • L lansing

                              @jsulm

                              I will be passing it as an argument after the conversion, so it would be shorter to do it in one line instead of three.

                              QFont preferenceFont;               
                              preferenceFont.fromString(fontString);
                              document->setFont(preferenceFont)
                              
                              J.HilkJ Offline
                              J.HilkJ Offline
                              J.Hilk
                              Moderators
                              wrote on last edited by
                              #14

                              @lansing

                              constexpr auto stringToFont = [](const QString &str)->QFont{
                                      QFont preferenceFont;               
                                      preferenceFont.fromString(str);
                                      return preferenceFont;
                                  };
                               document->setFont(stringToFont(fontString));
                              

                              made it constexpr to force inline-ness


                              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
                              4

                              • Login

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