Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. General talk
  3. Brainstorm
  4. Saving Qlist data in a mysql database

Saving Qlist data in a mysql database

Scheduled Pinned Locked Moved Unsolved Brainstorm
16 Posts 5 Posters 1.5k Views
  • 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.
  • SMF-QtS SMF-Qt

    Looking at the documentation QDataStream takes a QIODevice but I see no way to use a QList as a source for the QIODevice?

    JonBJ Offline
    JonBJ Offline
    JonB
    wrote on last edited by JonB
    #6

    @SMF-Qt
    Be aware that in order to stream your struct to/from a QDataStream you will need it to implement << & >> operators (not hard, just needs to be done).

    Note also that the image will be streamed as a PNG image (https://doc.qt.io/qt-5/qimage.html#operator-lt-lt-21), you don't have a choice over this, so that needs to be acceptable to you.

    1 Reply Last reply
    1
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #7

      In addition to @JonB, the operators shall be implemented for your custom structure, not QList.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      1
      • SMF-QtS Offline
        SMF-QtS Offline
        SMF-Qt
        wrote on last edited by
        #8

        Tried this for the << operator:

        QDataStream &operator<<(QDataStream &stream,const Anim_t &anim)
        {
        	stream << anim.ts.msecsSinceStartOfDay() << anim.I;
        	return  stream;
        }
        

        Got this error, what have I missed ?

        anim.h:35:15: error: 'QDataStream& Anim::operator<<(QDataStream&, const Anim::Anim_t&)' must have exactly one argument
        35 | QDataStream &operator<<(QDataStream &stream,const Anim_t &anim)

        1 Reply Last reply
        0
        • SMF-QtS Offline
          SMF-QtS Offline
          SMF-Qt
          wrote on last edited by
          #9

          For completeness I have done this for the ">>" operator and this gives a similar error:

          QDataStream &operator>>(QDataStream &stream,const Anim_t &anim)
          {
          	int t;
          	stream >> t >> anim.I;
          	anim.ts = QTime::fromMSecsSinceStartOfDay(t);
          
          	return  stream;
          }
          
          JonBJ 1 Reply Last reply
          0
          • Christian EhrlicherC Offline
            Christian EhrlicherC Offline
            Christian Ehrlicher
            Lifetime Qt Champion
            wrote on last edited by
            #10

            It must be a free function, if it's a member of your struct then you have to remove const Anim_t &anim

            Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
            Visit the Qt Academy at https://academy.qt.io/catalog

            1 Reply Last reply
            3
            • SMF-QtS SMF-Qt

              For completeness I have done this for the ">>" operator and this gives a similar error:

              QDataStream &operator>>(QDataStream &stream,const Anim_t &anim)
              {
              	int t;
              	stream >> t >> anim.I;
              	anim.ts = QTime::fromMSecsSinceStartOfDay(t);
              
              	return  stream;
              }
              
              JonBJ Offline
              JonBJ Offline
              JonB
              wrote on last edited by
              #11

              @SMF-Qt
              (In addition to @Christian-Ehrlicher) I thought you were going to implementing the << & >> streaming operators for your Anim_t struct itself.

              1 Reply Last reply
              0
              • SMF-QtS Offline
                SMF-QtS Offline
                SMF-Qt
                wrote on last edited by
                #12

                Ok implimented operators as free functions and everything now compiles, however on running the application the QByteArray is empty (example with one element in QList):

                ...

                QDataStream &operator<<(QDataStream &stream, const Anim::Anim_t &anim)
                {
                stream << anim.ts.msecsSinceStartOfDay() << anim.I;
                return stream;
                }

                QDataStream &operator>>(QDataStream &stream, Anim::Anim_t &anim)
                {
                int t;
                stream >> t >> anim.I;
                anim.ts = QTime::fromMSecsSinceStartOfDay(t);
                return stream;
                }

                ...

                	QByteArray array;
                        QDataStream stream(array);
                	for(int i=0;i<Animations.size();i++)
                	{
                	    stream << Animations.at(i);
                	}
                	QByteArray tmp=qCompress(array,9);
                	fprintf(stderr,"Binary Blob Animations (%lld) size %lld compressed size %lld\n",Animations.size(),array.size(),tmp.size());
                

                ...

                Binary Blob Animations (1) size 0 compressed size 4

                Any suggestions ?
                Thanks

                jsulmJ 1 Reply Last reply
                0
                • SMF-QtS SMF-Qt

                  Ok implimented operators as free functions and everything now compiles, however on running the application the QByteArray is empty (example with one element in QList):

                  ...

                  QDataStream &operator<<(QDataStream &stream, const Anim::Anim_t &anim)
                  {
                  stream << anim.ts.msecsSinceStartOfDay() << anim.I;
                  return stream;
                  }

                  QDataStream &operator>>(QDataStream &stream, Anim::Anim_t &anim)
                  {
                  int t;
                  stream >> t >> anim.I;
                  anim.ts = QTime::fromMSecsSinceStartOfDay(t);
                  return stream;
                  }

                  ...

                  	QByteArray array;
                          QDataStream stream(array);
                  	for(int i=0;i<Animations.size();i++)
                  	{
                  	    stream << Animations.at(i);
                  	}
                  	QByteArray tmp=qCompress(array,9);
                  	fprintf(stderr,"Binary Blob Animations (%lld) size %lld compressed size %lld\n",Animations.size(),array.size(),tmp.size());
                  

                  ...

                  Binary Blob Animations (1) size 0 compressed size 4

                  Any suggestions ?
                  Thanks

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

                  @SMF-Qt said in Saving Qlist data in a mysql database:

                  QDataStream stream(array);

                  Please read: https://doc.qt.io/qt-5/qdatastream.html#QDataStream-3
                  "Use QDataStream(QByteArray*, int) if you want to write to a byte array."

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

                  1 Reply Last reply
                  3
                  • SMF-QtS Offline
                    SMF-QtS Offline
                    SMF-Qt
                    wrote on last edited by
                    #14

                    Got it thanks. Problem solved.

                    Christian EhrlicherC 1 Reply Last reply
                    1
                    • SMF-QtS SMF-Qt

                      Got it thanks. Problem solved.

                      Christian EhrlicherC Offline
                      Christian EhrlicherC Offline
                      Christian Ehrlicher
                      Lifetime Qt Champion
                      wrote on last edited by
                      #15

                      @SMF-Qt Then also please mark this topic as solved, thx.

                      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                      Visit the Qt Academy at https://academy.qt.io/catalog

                      1 Reply Last reply
                      0
                      • SGaistS Offline
                        SGaistS Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on last edited by
                        #16

                        If I may, there's no need for the loop, you should be able to directly stream the list object and not go manually with that loop.

                        Interested in AI ? www.idiap.ch
                        Please read the Qt Code of Conduct - 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