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.2k 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 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