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. Send QVector via socket QString?
Forum Updated to NodeBB v4.3 + New Features

Send QVector via socket QString?

Scheduled Pinned Locked Moved Solved General and Desktop
18 Posts 4 Posters 1.6k Views 1 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.
  • K Offline
    K Offline
    Kris Revi
    wrote on last edited by
    #1

    so i have this

        QVector<quint16> RGB565; // quint16 = 16bit 565 | quint32 = 32bit 888
        RGB565.reserve(img2.width() * img2.height());
        for(int y = 0; y < img2.height(); y++) {
            const quint16 *line = reinterpret_cast<const quint16*>(img2.constScanLine(y));
            for(int x = 0; x < img2.width(); x++)
                RGB565 << *(line++);
        }
    

    i need to be able to send this RGB565via socket that is sending with QString

    socket.sendCommandStrip(QString("pixArt"), QString(RGB565));
    
    void Socket::sendCommandStrip(const QString &bName, const QString bValue)
    {
        m_webSocket.sendTextMessage(QStringLiteral("{ '%0' : '%1' }").arg(bName).arg(bValue));
    }
    
    JonBJ 1 Reply Last reply
    0
    • K Kris Revi

      so i have this

          QVector<quint16> RGB565; // quint16 = 16bit 565 | quint32 = 32bit 888
          RGB565.reserve(img2.width() * img2.height());
          for(int y = 0; y < img2.height(); y++) {
              const quint16 *line = reinterpret_cast<const quint16*>(img2.constScanLine(y));
              for(int x = 0; x < img2.width(); x++)
                  RGB565 << *(line++);
          }
      

      i need to be able to send this RGB565via socket that is sending with QString

      socket.sendCommandStrip(QString("pixArt"), QString(RGB565));
      
      void Socket::sendCommandStrip(const QString &bName, const QString bValue)
      {
          m_webSocket.sendTextMessage(QStringLiteral("{ '%0' : '%1' }").arg(bName).arg(bValue));
      }
      
      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by
      #2

      @Kris-Revi
      You have an array of 16-bit values. Don't you want to send them as binary data, or maybe as a hex- or base64-encoded string?

      1 Reply Last reply
      0
      • K Offline
        K Offline
        Kris Revi
        wrote on last edited by
        #3

        @JonB well in my python version i sent it as a list (that's what i know worked with the matrix)

            def convertImage(self):
                img = Image.open(self.imagePath)
        
                # Check if img is RGBA if true convert to RGB
                img = img.convert('RGB')
        
                # Shift the fucker arround to being RGB565
                self.final = [ (r >> 3) << 11 | (g >> 2) << 5 | (b >> 3) for (r, g, b) in img.getdata() ]
        
        JonBJ 1 Reply Last reply
        0
        • K Kris Revi

          @JonB well in my python version i sent it as a list (that's what i know worked with the matrix)

              def convertImage(self):
                  img = Image.open(self.imagePath)
          
                  # Check if img is RGBA if true convert to RGB
                  img = img.convert('RGB')
          
                  # Shift the fucker arround to being RGB565
                  self.final = [ (r >> 3) << 11 | (g >> 2) << 5 | (b >> 3) for (r, g, b) in img.getdata() ]
          
          JonBJ Offline
          JonBJ Offline
          JonB
          wrote on last edited by JonB
          #4

          @Kris-Revi
          I don't see why you want to turn the data into a QString to send. It's not text. I don't see any strings in your Python, you have just an array of 16-bit values. Which is presumably what "RGB565" is. Maybe someone else understands what you want.

          Not the best of comments in your code... ;-)

          1 Reply Last reply
          0
          • K Offline
            K Offline
            Kris Revi
            wrote on last edited by
            #5

            @JonB cause im sending both text and ints so i figured String was the best option! if you know a better way then please tell me!

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

              Hi,

              Your python code just shows a list creation not how you actually are sending data.

              As @JonB already wrote, you have to serialize your vector to string before sending it.

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

              K 1 Reply Last reply
              1
              • SGaistS SGaist

                Hi,

                Your python code just shows a list creation not how you actually are sending data.

                As @JonB already wrote, you have to serialize your vector to string before sending it.

                K Offline
                K Offline
                Kris Revi
                wrote on last edited by
                #7

                @SGaist you are actualy right! :P

                here (that's how in python)

                self.ui.BUTTON_SEND_ESP32.clicked.connect(lambda : self.socket.sendImage('pixArt', self.final))
                
                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #8

                  What is self.socket ?

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

                  K 1 Reply Last reply
                  0
                  • SGaistS SGaist

                    What is self.socket ?

                    K Offline
                    K Offline
                    Kris Revi
                    wrote on last edited by
                    #9

                    @SGaist

                    self.socket = Socket(host="matrix32")
                    self.socket.Connect()
                    

                    MySocket.py

                    from PyQt5 import QtCore, QtWebSockets
                    from PyQt5.QtCore import QUrl
                    import json
                    
                    class Socket:
                    
                        def __init__(self, *args, **kwargs):
                            self.client = QtWebSockets.QWebSocket('', QtWebSockets.QWebSocketProtocol.Version13, None)
                            self.client.error.connect(self.on_error)
                            self.hostAdr = kwargs['host']
                    
                        def Connect(self):
                            self.client.open(QUrl(f"ws://{self.hostAdr}:80"))
                    
                        def sendMessage(self, bName, bValue):
                            self.client.sendTextMessage('{"' + bName + '": "' + str(bValue) + '"}')
                    
                        def sendImage(self, bName, bValue):
                            self.client.sendTextMessage(json.dumps({bName: bValue}))
                    
                        def on_error(self, error_code):
                            print('error code: {}'.format(error_code))
                            print(self.client.errorString())
                    
                        def close(self):
                            self.client.close()
                    

                    i see here that i actualy json.dumps what is the equal for Qt ?

                    JonBJ 1 Reply Last reply
                    0
                    • K Kris Revi

                      @SGaist

                      self.socket = Socket(host="matrix32")
                      self.socket.Connect()
                      

                      MySocket.py

                      from PyQt5 import QtCore, QtWebSockets
                      from PyQt5.QtCore import QUrl
                      import json
                      
                      class Socket:
                      
                          def __init__(self, *args, **kwargs):
                              self.client = QtWebSockets.QWebSocket('', QtWebSockets.QWebSocketProtocol.Version13, None)
                              self.client.error.connect(self.on_error)
                              self.hostAdr = kwargs['host']
                      
                          def Connect(self):
                              self.client.open(QUrl(f"ws://{self.hostAdr}:80"))
                      
                          def sendMessage(self, bName, bValue):
                              self.client.sendTextMessage('{"' + bName + '": "' + str(bValue) + '"}')
                      
                          def sendImage(self, bName, bValue):
                              self.client.sendTextMessage(json.dumps({bName: bValue}))
                      
                          def on_error(self, error_code):
                              print('error code: {}'.format(error_code))
                              print(self.client.errorString())
                      
                          def close(self):
                              self.client.close()
                      

                      i see here that i actualy json.dumps what is the equal for Qt ?

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

                      @Kris-Revi
                      const QByteArray QJsonDocument::toJson(QJsonDocument::JsonFormat format)

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

                        Technically there's no direct equivalent. However you can build a QString with a simple loop for example. Maybe std::transform or QTextStream.

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

                        JonBJ 1 Reply Last reply
                        0
                        • SGaistS SGaist

                          Technically there's no direct equivalent. However you can build a QString with a simple loop for example. Maybe std::transform or QTextStream.

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

                          @SGaist
                          ? Why isn't const QByteArray QJsonDocument::toJson(QJsonDocument::JsonFormat format) the closest to what OP wants for json.dumps?

                          1 Reply Last reply
                          0
                          • K Offline
                            K Offline
                            Kris Revi
                            wrote on last edited by
                            #13

                            @JonB said in Send QVector via socket QString?:

                            const QByteArray QJsonDocument::toJson(QJsonDocument::JsonFormat format)

                            how do i use that?

                            JonBJ 1 Reply Last reply
                            0
                            • B Offline
                              B Offline
                              Bonnie
                              wrote on last edited by Bonnie
                              #14

                              You don't have to use QVector.
                              To make it easy for json, I would change the code to

                              QJsonArray RGB565;
                              for(int y = 0; y < img2.height(); y++) {
                                  const quint16 *line = reinterpret_cast<const quint16*>(img2.constScanLine(y));
                                  for(int x = 0; x < img2.width(); x++)
                                      RGB565 << *(line++);
                              }
                              

                              Meanwhile your send command can also be changed to more json-friendly

                              void Socket::sendCommandStrip(const QString &bName, const QJsonValue bValue)
                              {
                                  m_webSocket.sendTextMessage(QJsonDocument(QJsonObject{{bName, bValue}}).toJson(QJsonDocument::Compact));
                              }
                              

                              So then you can call the command directly

                              socket.sendCommandStrip(QString("pixArt"), RGB565);
                              //you can also pass QString as the value
                              socket.sendCommandStrip(QString("otherName"), QString("otherValue"));
                              //or number
                              socket.sendCommandStrip(QString("anotherName"), 100);
                              
                              K 1 Reply Last reply
                              3
                              • B Bonnie

                                You don't have to use QVector.
                                To make it easy for json, I would change the code to

                                QJsonArray RGB565;
                                for(int y = 0; y < img2.height(); y++) {
                                    const quint16 *line = reinterpret_cast<const quint16*>(img2.constScanLine(y));
                                    for(int x = 0; x < img2.width(); x++)
                                        RGB565 << *(line++);
                                }
                                

                                Meanwhile your send command can also be changed to more json-friendly

                                void Socket::sendCommandStrip(const QString &bName, const QJsonValue bValue)
                                {
                                    m_webSocket.sendTextMessage(QJsonDocument(QJsonObject{{bName, bValue}}).toJson(QJsonDocument::Compact));
                                }
                                

                                So then you can call the command directly

                                socket.sendCommandStrip(QString("pixArt"), RGB565);
                                //you can also pass QString as the value
                                socket.sendCommandStrip(QString("otherName"), QString("otherValue"));
                                //or number
                                socket.sendCommandStrip(QString("anotherName"), 100);
                                
                                K Offline
                                K Offline
                                Kris Revi
                                wrote on last edited by
                                #15

                                @Bonnie omg that is sexy! 😅

                                1 Reply Last reply
                                0
                                • K Kris Revi

                                  @JonB said in Send QVector via socket QString?:

                                  const QByteArray QJsonDocument::toJson(QJsonDocument::JsonFormat format)

                                  how do i use that?

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

                                  @Kris-Revi said in Send QVector via socket QString?:

                                  const QByteArray QJsonDocument::toJson(QJsonDocument::JsonFormat format)

                                  how do i use that?

                                  Note how that is what @Bonnie is using in his example :)

                                  K 1 Reply Last reply
                                  0
                                  • JonBJ JonB

                                    @Kris-Revi said in Send QVector via socket QString?:

                                    const QByteArray QJsonDocument::toJson(QJsonDocument::JsonFormat format)

                                    how do i use that?

                                    Note how that is what @Bonnie is using in his example :)

                                    K Offline
                                    K Offline
                                    Kris Revi
                                    wrote on last edited by
                                    #17

                                    @JonB yea i see that :) but he also made my sendCommand sexy in the process xD

                                    JonBJ 1 Reply Last reply
                                    0
                                    • K Kris Revi

                                      @JonB yea i see that :) but he also made my sendCommand sexy in the process xD

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

                                      @Kris-Revi
                                      LOL. If that's what floats your "sexy" boat, that is good :D The point anyway is that it is via QJsonDocument::toJson() that you can transform your data into something suitable to send.

                                      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