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. How to create a 2d array from a QImage?
Forum Update on Monday, May 27th 2025

How to create a 2d array from a QImage?

Scheduled Pinned Locked Moved Solved General and Desktop
10 Posts 3 Posters 5.3k 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.
  • OliveiraNTO Offline
    OliveiraNTO Offline
    OliveiraNT
    wrote on last edited by OliveiraNT
    #1

    I need to get a 2d array from a QImage to use in prediction.
    Is there any way to do this using only Qt classes (or maybe using openCV)?

    Thanks!!

    1 Reply Last reply
    0
    • Todd MorehouseT Offline
      Todd MorehouseT Offline
      Todd Morehouse
      wrote on last edited by
      #2

      Are you trying to convert from QImage to cv::mat?
      If so you may be able to skip the process with a function from this helpful guy over here. He helped me with all my opencv issues with qt.

      QImage frmMain::convertOpenCVMatToQtQImage(cv::Mat mat) {
          if(mat.channels() == 1) {                   // if grayscale image
              return QImage((uchar*)mat.data, mat.cols, mat.rows, mat.step, QImage::Format_Indexed8);     // declare and return a QImage
          } else if(mat.channels() == 3) {            // if 3 channel color image
              cv::cvtColor(mat, mat, CV_BGR2RGB);     // invert BGR to RGB
              return QImage((uchar*)mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);       // declare and return a QImage
          } else {
              qDebug() << "in convertOpenCVMatToQtQImage, image was not 1 channel or 3 channel, should never get here";
          }
          return QImage();        // return a blank QImage if the above did not work
      }
      

      College Electronics Engineering Student
      current project 3D Printer Embedded Computer

      High School Robotics Project - InMoov Humanoid Robot Head

      FTC Robotics Member 2013-2015
      SkillsUSA Mobile Robotics Competitor 2014

      OliveiraNTO 1 Reply Last reply
      0
      • Todd MorehouseT Todd Morehouse

        Are you trying to convert from QImage to cv::mat?
        If so you may be able to skip the process with a function from this helpful guy over here. He helped me with all my opencv issues with qt.

        QImage frmMain::convertOpenCVMatToQtQImage(cv::Mat mat) {
            if(mat.channels() == 1) {                   // if grayscale image
                return QImage((uchar*)mat.data, mat.cols, mat.rows, mat.step, QImage::Format_Indexed8);     // declare and return a QImage
            } else if(mat.channels() == 3) {            // if 3 channel color image
                cv::cvtColor(mat, mat, CV_BGR2RGB);     // invert BGR to RGB
                return QImage((uchar*)mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);       // declare and return a QImage
            } else {
                qDebug() << "in convertOpenCVMatToQtQImage, image was not 1 channel or 3 channel, should never get here";
            }
            return QImage();        // return a blank QImage if the above did not work
        }
        
        OliveiraNTO Offline
        OliveiraNTO Offline
        OliveiraNT
        wrote on last edited by
        #3

        @Todd-Morehouse I'm trying to do the opposite of this, I already have the QImage and now I need to create an array from this QImage.
        something like that:

        [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
          0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
        [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
          0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
        [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
          0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
        [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
          0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
        [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
          0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.01176471
          0.07058824  0.07058824  0.07058824  0.49411765  0.53333336  0.68627453
          0.10196079  0.65098041  1.          0.96862745  0.49803922  0.          0.
          0.          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.11764706  0.14117648  0.36862746  0.60392159  0.66666669
          0.99215686  0.99215686  0.99215686  0.99215686  0.99215686  0.88235295
          0.67450982  0.99215686  0.94901961  0.7647059   0.25098041  0.          0.
          0.          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.19215687  0.93333334  0.99215686  0.99215686  0.99215686  0.99215686
          0.99215686  0.99215686  0.99215686  0.99215686  0.98431373  0.36470589
          0.32156864  0.32156864  0.21960784  0.15294118  0.          0.          0.
          0.          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.07058824  0.85882354  0.99215686  0.99215686  0.99215686  0.99215686
          0.99215686  0.7764706   0.71372551  0.96862745  0.94509804  0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.3137255   0.61176473  0.41960785  0.99215686  0.99215686
          0.80392158  0.04313726  0.          0.16862746  0.60392159  0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.05490196  0.00392157  0.60392159  0.99215686
          0.35294119  0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.54509807  0.99215686
          0.74509805  0.00784314  0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.04313726  0.74509805
          0.99215686  0.27450982  0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.13725491
          0.94509804  0.88235295  0.627451    0.42352942  0.00392157  0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.
          0.31764707  0.94117647  0.99215686  0.99215686  0.46666667  0.09803922
          0.          0.          0.          0.          0.          0.          0.
          0.          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.17647059  0.72941178  0.99215686  0.99215686  0.58823532  0.10588235
          0.          0.          0.          0.          0.          0.          0.
          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.          0.0627451   0.36470589  0.98823529  0.99215686  0.73333335
          0.          0.          0.          0.          0.          0.          0.
          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.97647059  0.99215686  0.97647059
          0.25098041  0.          0.          0.          0.          0.          0.
          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.18039216  0.50980395  0.71764708  0.99215686  0.99215686  0.81176472
          0.00784314  0.          0.          0.          0.          0.          0.
          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.15294118
          0.58039218  0.89803922  0.99215686  0.99215686  0.99215686  0.98039216
          0.71372551  0.          0.          0.          0.          0.          0.
          0.          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.09411765  0.44705883  0.86666667
          0.99215686  0.99215686  0.99215686  0.99215686  0.78823531  0.30588236
          0.          0.          0.          0.          0.          0.          0.
          0.          0.        ]
        [ 0.          0.          0.          0.          0.          0.          0.
          0.          0.09019608  0.25882354  0.83529413  0.99215686  0.99215686
          0.99215686  0.99215686  0.7764706   0.31764707  0.00784314  0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.        ]
        [ 0.          0.          0.          0.          0.          0.
          0.07058824  0.67058825  0.85882354  0.99215686  0.99215686  0.99215686
          0.99215686  0.7647059   0.3137255   0.03529412  0.          0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.          0.        ]
        [ 0.          0.          0.          0.          0.21568628  0.67450982
          0.88627452  0.99215686  0.99215686  0.99215686  0.99215686  0.95686275
          0.52156866  0.04313726  0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.          0.        ]
        [ 0.          0.          0.          0.          0.53333336  0.99215686
          0.99215686  0.99215686  0.83137256  0.52941179  0.51764709  0.0627451   0.
          0.          0.          0.          0.          0.          0.          0.
          0.          0.          0.          0.          0.          0.          0.
          0.        ]
        [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
          0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
        [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
          0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
        [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
          0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
        

        That is a numpy array created from MNIST dataset image but using pyton and I need to recreate this in c++.

        kshegunovK 1 Reply Last reply
        0
        • OliveiraNTO OliveiraNT

          @Todd-Morehouse I'm trying to do the opposite of this, I already have the QImage and now I need to create an array from this QImage.
          something like that:

          [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
            0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
          [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
            0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
          [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
            0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
          [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
            0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
          [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
            0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.01176471
            0.07058824  0.07058824  0.07058824  0.49411765  0.53333336  0.68627453
            0.10196079  0.65098041  1.          0.96862745  0.49803922  0.          0.
            0.          0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.11764706  0.14117648  0.36862746  0.60392159  0.66666669
            0.99215686  0.99215686  0.99215686  0.99215686  0.99215686  0.88235295
            0.67450982  0.99215686  0.94901961  0.7647059   0.25098041  0.          0.
            0.          0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.19215687  0.93333334  0.99215686  0.99215686  0.99215686  0.99215686
            0.99215686  0.99215686  0.99215686  0.99215686  0.98431373  0.36470589
            0.32156864  0.32156864  0.21960784  0.15294118  0.          0.          0.
            0.          0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.07058824  0.85882354  0.99215686  0.99215686  0.99215686  0.99215686
            0.99215686  0.7764706   0.71372551  0.96862745  0.94509804  0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.3137255   0.61176473  0.41960785  0.99215686  0.99215686
            0.80392158  0.04313726  0.          0.16862746  0.60392159  0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.05490196  0.00392157  0.60392159  0.99215686
            0.35294119  0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.54509807  0.99215686
            0.74509805  0.00784314  0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.04313726  0.74509805
            0.99215686  0.27450982  0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.13725491
            0.94509804  0.88235295  0.627451    0.42352942  0.00392157  0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.
            0.31764707  0.94117647  0.99215686  0.99215686  0.46666667  0.09803922
            0.          0.          0.          0.          0.          0.          0.
            0.          0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.17647059  0.72941178  0.99215686  0.99215686  0.58823532  0.10588235
            0.          0.          0.          0.          0.          0.          0.
            0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.          0.0627451   0.36470589  0.98823529  0.99215686  0.73333335
            0.          0.          0.          0.          0.          0.          0.
            0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.97647059  0.99215686  0.97647059
            0.25098041  0.          0.          0.          0.          0.          0.
            0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.18039216  0.50980395  0.71764708  0.99215686  0.99215686  0.81176472
            0.00784314  0.          0.          0.          0.          0.          0.
            0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.15294118
            0.58039218  0.89803922  0.99215686  0.99215686  0.99215686  0.98039216
            0.71372551  0.          0.          0.          0.          0.          0.
            0.          0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.09411765  0.44705883  0.86666667
            0.99215686  0.99215686  0.99215686  0.99215686  0.78823531  0.30588236
            0.          0.          0.          0.          0.          0.          0.
            0.          0.        ]
          [ 0.          0.          0.          0.          0.          0.          0.
            0.          0.09019608  0.25882354  0.83529413  0.99215686  0.99215686
            0.99215686  0.99215686  0.7764706   0.31764707  0.00784314  0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.        ]
          [ 0.          0.          0.          0.          0.          0.
            0.07058824  0.67058825  0.85882354  0.99215686  0.99215686  0.99215686
            0.99215686  0.7647059   0.3137255   0.03529412  0.          0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.          0.        ]
          [ 0.          0.          0.          0.          0.21568628  0.67450982
            0.88627452  0.99215686  0.99215686  0.99215686  0.99215686  0.95686275
            0.52156866  0.04313726  0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.          0.        ]
          [ 0.          0.          0.          0.          0.53333336  0.99215686
            0.99215686  0.99215686  0.83137256  0.52941179  0.51764709  0.0627451   0.
            0.          0.          0.          0.          0.          0.          0.
            0.          0.          0.          0.          0.          0.          0.
            0.        ]
          [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
            0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
          [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
            0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
          [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
            0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
          

          That is a numpy array created from MNIST dataset image but using pyton and I need to recreate this in c++.

          kshegunovK Offline
          kshegunovK Offline
          kshegunov
          Moderators
          wrote on last edited by kshegunov
          #4

          @OliveiraNT
          An image is a compound object, what exactly you want to extract from the image, a specific color channel?

          PS.
          Do you want to get the array(s) in pyton?

          Read and abide by the Qt Code of Conduct

          OliveiraNTO 1 Reply Last reply
          1
          • kshegunovK kshegunov

            @OliveiraNT
            An image is a compound object, what exactly you want to extract from the image, a specific color channel?

            PS.
            Do you want to get the array(s) in pyton?

            OliveiraNTO Offline
            OliveiraNTO Offline
            OliveiraNT
            wrote on last edited by
            #5

            @kshegunov
            This array was created using this code in python

            (X_train, y_train), (X_test, y_test) = mnist.load_data()
            X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols)
            X_train = X_train.astype('float32')
            X_train /= 255
            

            and I need reproduce this in c++ but now using a QImage as a source.

            1 Reply Last reply
            0
            • kshegunovK Offline
              kshegunovK Offline
              kshegunov
              Moderators
              wrote on last edited by kshegunov
              #6

              Something along those lines should be just enough (haven't tested it though):

              QImage image; //< This has to be 8 bit monochrome image
              
              qint32 width = image.width(), height = image.height();
              quintptr scanLineSize = static_cast<quintptr>(width & 0x3 ? width + 1 : width) << 2;
              
              const quint8 * data = reinterpret_cast<const quint8 *>(image.constBits());
              
              QVector<QVector<float>> matrix;
              
              matrix.resize(height);
              for (qint32 row = 0; row < height; row++)  {
                  matrix[row].resize(width);
                  for (qint32 column = 0; column < width; column++)
                      matrix[row][column] = data[column] / 255.0f;
                  data += scanLineSize;
              }
              

              Read and abide by the Qt Code of Conduct

              OliveiraNTO 2 Replies Last reply
              3
              • kshegunovK kshegunov

                Something along those lines should be just enough (haven't tested it though):

                QImage image; //< This has to be 8 bit monochrome image
                
                qint32 width = image.width(), height = image.height();
                quintptr scanLineSize = static_cast<quintptr>(width & 0x3 ? width + 1 : width) << 2;
                
                const quint8 * data = reinterpret_cast<const quint8 *>(image.constBits());
                
                QVector<QVector<float>> matrix;
                
                matrix.resize(height);
                for (qint32 row = 0; row < height; row++)  {
                    matrix[row].resize(width);
                    for (qint32 column = 0; column < width; column++)
                        matrix[row][column] = data[column] / 255.0f;
                    data += scanLineSize;
                }
                
                OliveiraNTO Offline
                OliveiraNTO Offline
                OliveiraNT
                wrote on last edited by
                #7

                @kshegunov I'll test this soonest as possible and post the result here.
                Thanks.

                1 Reply Last reply
                1
                • kshegunovK kshegunov

                  Something along those lines should be just enough (haven't tested it though):

                  QImage image; //< This has to be 8 bit monochrome image
                  
                  qint32 width = image.width(), height = image.height();
                  quintptr scanLineSize = static_cast<quintptr>(width & 0x3 ? width + 1 : width) << 2;
                  
                  const quint8 * data = reinterpret_cast<const quint8 *>(image.constBits());
                  
                  QVector<QVector<float>> matrix;
                  
                  matrix.resize(height);
                  for (qint32 row = 0; row < height; row++)  {
                      matrix[row].resize(width);
                      for (qint32 column = 0; column < width; column++)
                          matrix[row][column] = data[column] / 255.0f;
                      data += scanLineSize;
                  }
                  
                  OliveiraNTO Offline
                  OliveiraNTO Offline
                  OliveiraNT
                  wrote on last edited by
                  #8

                  @kshegunov
                  I test your code and its seems just like what I need.
                  Really thanks for your help.
                  Now I using a QVectorIterator to output matrix on console with qDebug but what I need is create a texte file with this, I tryed to do this using QFile but it fail because QFile is not overloaded to read a vector . Do you know some way to do this?

                  kshegunovK 1 Reply Last reply
                  0
                  • OliveiraNTO OliveiraNT

                    @kshegunov
                    I test your code and its seems just like what I need.
                    Really thanks for your help.
                    Now I using a QVectorIterator to output matrix on console with qDebug but what I need is create a texte file with this, I tryed to do this using QFile but it fail because QFile is not overloaded to read a vector . Do you know some way to do this?

                    kshegunovK Offline
                    kshegunovK Offline
                    kshegunov
                    Moderators
                    wrote on last edited by kshegunov
                    #9

                    That's a good place to use QTextStream. It doesn't have an overloaded operator for vectors, but you can always provide one by yourself, e.g:

                    template <class T>
                    QTextStream & operator << (QTextStream & out, const QVector<QVector<T>> & data)
                    {
                        qint32 rows = data.size(), cols = rows > 0 ? data.first().size() : -1;
                        if (cols <= 0)  {  //< We passed invalid data
                            out.setStatus(QTextStream::WriteFailed); //< Indicate an error
                            return out;
                        }
                    
                        // Write the dimensions first (we can do without, but it's better to have them)
                        out << rows << ' ' << cols << endl;
                        // Write the data row by row, element by element
                        for (qint32 i = 0; i < rows; i++)  {
                            if (i > 0)
                                out << endl;
                            for (qint32 j = 0; j < columns; j++)  {
                                if (j > 0)
                                    out << ' ';
                                out << data[i][j];
                            }
                        }
                    
                        return out;
                    }
                    

                    You can then use this with a QTextStream object:

                    QVector<QVector<float>> matrix;
                    
                    QFile file("myfile.txt");
                    if (!file.open(QFile::WriteOnly | QFile::Text | QFile::Truncate))
                        ; //< Errors should be handled appropriately
                    
                    QTextStream out(&file);
                    out << matrix;
                    

                    Read and abide by the Qt Code of Conduct

                    OliveiraNTO 1 Reply Last reply
                    1
                    • kshegunovK kshegunov

                      That's a good place to use QTextStream. It doesn't have an overloaded operator for vectors, but you can always provide one by yourself, e.g:

                      template <class T>
                      QTextStream & operator << (QTextStream & out, const QVector<QVector<T>> & data)
                      {
                          qint32 rows = data.size(), cols = rows > 0 ? data.first().size() : -1;
                          if (cols <= 0)  {  //< We passed invalid data
                              out.setStatus(QTextStream::WriteFailed); //< Indicate an error
                              return out;
                          }
                      
                          // Write the dimensions first (we can do without, but it's better to have them)
                          out << rows << ' ' << cols << endl;
                          // Write the data row by row, element by element
                          for (qint32 i = 0; i < rows; i++)  {
                              if (i > 0)
                                  out << endl;
                              for (qint32 j = 0; j < columns; j++)  {
                                  if (j > 0)
                                      out << ' ';
                                  out << data[i][j];
                              }
                          }
                      
                          return out;
                      }
                      

                      You can then use this with a QTextStream object:

                      QVector<QVector<float>> matrix;
                      
                      QFile file("myfile.txt");
                      if (!file.open(QFile::WriteOnly | QFile::Text | QFile::Truncate))
                          ; //< Errors should be handled appropriately
                      
                      QTextStream out(&file);
                      out << matrix;
                      
                      OliveiraNTO Offline
                      OliveiraNTO Offline
                      OliveiraNT
                      wrote on last edited by
                      #10

                      @kshegunov Thank you so much for your help I really learned a lot about Qt and now I'm close to finish my project. Again, thank you for spend your time to help me.

                      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