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.
  • 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