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

Problem with gbinary files, and QVector

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