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. Problem with gbinary files, and QVector
Forum Updated to NodeBB v4.3 + New Features

Problem with gbinary files, and QVector

Scheduled Pinned Locked Moved General and Desktop
35 Posts 7 Posters 5.8k 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.
  • jsulmJ jsulm

    @Loc888 No, you just implement << and >> operators for your own data types.
    See documentation: http://doc.qt.io/qt-5/qdatastream.html#
    You need:

    QDataStream &operator<<(QDataStream &, const YOUR_TYPE &);
    QDataStream &operator>>(QDataStream &, YOUR_TYPE &);
    

    You don't have to do it for Qt types like QVector.

    L Offline
    L Offline
    Loc888
    wrote on last edited by
    #23

    @jsulm Ok, i took a look, and it says

    "In addition to the overloaded stream operators documented here, any Qt classes that you might want to serialize to a QDataStream will have appropriate stream operators declared as non-member of the class:"

    So i have to do that, outside the class, but how to use it then? If i crate a object, then how to use that overloaded operators?

    mrjjM 1 Reply Last reply
    0
    • L Loc888

      @jsulm Ok, i took a look, and it says

      "In addition to the overloaded stream operators documented here, any Qt classes that you might want to serialize to a QDataStream will have appropriate stream operators declared as non-member of the class:"

      So i have to do that, outside the class, but how to use it then? If i crate a object, then how to use that overloaded operators?

      mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #24

      @Loc888 said in Problem with gbinary files, and QVector:

      So i have to do that, outside the class, but how to use it then? If i crate a object, then how to use that overloaded operators?

      Hi
      That is the easy part.
      Simply try it and see

      QFile file("file.dat");
      file.open(QIODevice::WriteOnly);
      QDataStream out(&file);
      out << *yourclassptr;
      (note the *)
      if Qt can find an << for a type, it will simply use it.

      That way, you can << anything you like.

      L 1 Reply Last reply
      1
      • mrjjM mrjj

        @Loc888 said in Problem with gbinary files, and QVector:

        So i have to do that, outside the class, but how to use it then? If i crate a object, then how to use that overloaded operators?

        Hi
        That is the easy part.
        Simply try it and see

        QFile file("file.dat");
        file.open(QIODevice::WriteOnly);
        QDataStream out(&file);
        out << *yourclassptr;
        (note the *)
        if Qt can find an << for a type, it will simply use it.

        That way, you can << anything you like.

        L Offline
        L Offline
        Loc888
        wrote on last edited by
        #25

        @mrjj Ok, i try. SO i have to do a class, put there thise operators, and then use:

        out << *new_class ?

        mrjjM 1 Reply Last reply
        0
        • L Loc888

          @mrjj Ok, i try. SO i have to do a class, put there thise operators, and then use:

          out << *new_class ?

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by mrjj
          #26

          @Loc888
          Yes and the reason for the * in from of object pointer is that the header says
          (QDataStream &, const YOUR_TYPE &); << reference

          so if you give it the pointer without *, it
          will save/stream the address of the object as it then matches << for int instead.
          so say always use * when you have a pointer to an object with <<

          1 Reply Last reply
          0
          • mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by
            #27

            Hi
            Just to be sure
            can you show your
            QDataStream &operator<<(QDataStream &, const YOUR_Class &);
            implementation.
            (not the .h declaration) but the actual body of it.

            L 1 Reply Last reply
            0
            • mrjjM mrjj

              Hi
              Just to be sure
              can you show your
              QDataStream &operator<<(QDataStream &, const YOUR_Class &);
              implementation.
              (not the .h declaration) but the actual body of it.

              L Offline
              L Offline
              Loc888
              wrote on last edited by Loc888
              #28

              @mrjj In the QDataStream Class it looks like that, so i guess i am gonna use this template, except i am gonna use a custom data:

              inline QDataStream &QDataStream::operator<<(quint16 i)
              { return *this << qint16(i); }

              1 Reply Last reply
              0
              • mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by mrjj
                #29

                Hi
                Here is small sample.

                --in the .H file--
                class MyClass
                {
                public:
                    int value = 6;
                    QString name = "test";
                };
                
                QDataStream &operator<<(QDataStream &out, const MyClass &);
                QDataStream &operator>>(QDataStream &in, MyClass &);
                
                -----------
                --in the .CPP file--
                QDataStream &operator<<(QDataStream &out, const MyClass &classRef) {
                return out << classRef.value <<  classRef.name; // save each member of your class
                }
                
                QDataStream &operator>>(QDataStream &in,  MyClass &classRef){
                return in >> classRef.value >>  classRef.name; // read in IN SAME order
                }
                
                ------------------------------
                //--test of saving--
                   {
                        QFile file("e:/file.dat");
                        file.open(QIODevice::WriteOnly);
                        QDataStream out(&file);
                        MyClass *ptr = new MyClass;
                        out << *ptr;
                    }
                //--test of loading--
                    {
                        QFile file("e:/file.dat");
                        file.open(QIODevice::ReadOnly);
                        QDataStream in(&file);
                        MyClass *otherptr = new MyClass;
                        in >> *otherptr;      
                    }
                
                
                L 1 Reply Last reply
                1
                • mrjjM mrjj

                  Hi
                  Here is small sample.

                  --in the .H file--
                  class MyClass
                  {
                  public:
                      int value = 6;
                      QString name = "test";
                  };
                  
                  QDataStream &operator<<(QDataStream &out, const MyClass &);
                  QDataStream &operator>>(QDataStream &in, MyClass &);
                  
                  -----------
                  --in the .CPP file--
                  QDataStream &operator<<(QDataStream &out, const MyClass &classRef) {
                  return out << classRef.value <<  classRef.name; // save each member of your class
                  }
                  
                  QDataStream &operator>>(QDataStream &in,  MyClass &classRef){
                  return in >> classRef.value >>  classRef.name; // read in IN SAME order
                  }
                  
                  ------------------------------
                  //--test of saving--
                     {
                          QFile file("e:/file.dat");
                          file.open(QIODevice::WriteOnly);
                          QDataStream out(&file);
                          MyClass *ptr = new MyClass;
                          out << *ptr;
                      }
                  //--test of loading--
                      {
                          QFile file("e:/file.dat");
                          file.open(QIODevice::ReadOnly);
                          QDataStream in(&file);
                          MyClass *otherptr = new MyClass;
                          in >> *otherptr;      
                      }
                  
                  
                  L Offline
                  L Offline
                  Loc888
                  wrote on last edited by
                  #30

                  @mrjj Something weird is happening, i declared those operators in a header file, then include it, and it's working, if i use that MyClass pointer, then i get the error..

                  mrjjM 1 Reply Last reply
                  0
                  • L Loc888

                    @mrjj Something weird is happening, i declared those operators in a header file, then include it, and it's working, if i use that MyClass pointer, then i get the error..

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #31

                    @Loc888
                    What error?

                    L 1 Reply Last reply
                    0
                    • mrjjM mrjj

                      @Loc888
                      What error?

                      L Offline
                      L Offline
                      Loc888
                      wrote on last edited by
                      #32

                      @mrjj Nope, it's ok... I just typed the wrong object type. It's working finnaly. Thanks
                      everybody for help.

                      mrjjM 1 Reply Last reply
                      1
                      • L Loc888

                        @mrjj Nope, it's ok... I just typed the wrong object type. It's working finnaly. Thanks
                        everybody for help.

                        mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by mrjj
                        #33

                        @Loc888
                        Good work. :)
                        please mark as solved then.

                        L 1 Reply Last reply
                        0
                        • mrjjM mrjj

                          @Loc888
                          Good work. :)
                          please mark as solved then.

                          L Offline
                          L Offline
                          Loc888
                          wrote on last edited by
                          #34

                          @mrjj It's solved, but i don't wanna close it, maybe somebody will need help with that STD stuff, i leave it behind for now, because this motheod is cleaner and faster.

                          jsulmJ 1 Reply Last reply
                          0
                          • L Loc888

                            @mrjj It's solved, but i don't wanna close it, maybe somebody will need help with that STD stuff, i leave it behind for now, because this motheod is cleaner and faster.

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

                            @Loc888 Please close. If somebody has a problem/question he/she can open a new thread. Your problem is solved, right?

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

                            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