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 insert new line imported from csv file in my QStandardItemModel in a TableView ?

How to insert new line imported from csv file in my QStandardItemModel in a TableView ?

Scheduled Pinned Locked Moved Unsolved General and Desktop
5 Posts 2 Posters 440 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.
  • I Offline
    I Offline
    imene
    wrote on last edited by
    #1

    Hi ,
    How to insert new line imported from csv file in my QStandardItemModel in a TableView:
    This is the code in my main window.cpp:

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        m_ui(new Ui::MainWindow)
    {
        m_ui->setupUi(this);
    model = new QStandardItemModel(0,6,this);
        model->setHeaderData(0, Qt::Horizontal, "C 1", Qt::DisplayRole);
        model->setHeaderData(1, Qt::Horizontal, "C 2", Qt::DisplayRole);
        model->setHeaderData(2, Qt::Horizontal, "C 3", Qt::DisplayRole);
        model->setHeaderData(3, Qt::Horizontal, "C 4", Qt::DisplayRole);
        model->setHeaderData(4, Qt::Horizontal, "C 5", Qt::DisplayRole);
        model->setHeaderData(5, Qt::Horizontal, "C 6", Qt::DisplayRole);
    m_ui->Table_CSV->setModel(model);
    }
    

    This "model" is static how can i make it dynamic add, modify ,delete... this is what i get:
    5d3a406a-c7d4-4086-83a4-763e021a95dc-image.png

    First i've worked with this code for "open" csv file button but it doesn't work now because the model is static:

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        m_ui(new Ui::MainWindow)
    {
        m_ui->setupUi(this);
        model = new QStandardItemModel(this); //modified line
         m_ui->Table_CSV->setModel(model);
    }
    
    void MainWindow::on_Open_Button_clicked()
    {
    
    
        auto FilePath = QFileDialog::getOpenFileName(this, "Open", QDir::rootPath(), "CSV File(*.csv)");
        if(FilePath.isEmpty())
        {
            return ;
        }
        QFile file(FilePath);
        if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            return ;
        }
        QTextStream xin(&file);
        int ix = 0;
        while(!xin.atEnd())
        {
    
    
    
           //model->setRowCount(ix); //
                   // qDebug()<<"mModel->setRowCount(ix) "<<ix;
    
            auto line = xin.readLine();
            qDebug()<<"auto line = xin.readLine(); "<<line;
            auto values = line.split(",");
            qDebug()<<"auto values = line.split(""); "<<values ;
            const int colCount = values.size();
            qDebug()<<"const int colCount = values.size(); "<<colCount ;
            //model->setColumnCount(colCount);
            qDebug()<<"mModel->setColumnCount(colCount); "<<colCount ;
            for(int jx=0; jx<colCount; ++jx)
            {
                setValueAt(ix, jx, values.at(jx));
                qDebug()<<"setValueAt(ix, jx, values.at(jx)); "<< values.at(jx) ;
            }
            ++ix;
    
    
        }
    
        //QString Data = m_ui->Table_CSV->model()->data(m_ui->Table_CSV->model()->index(0,2)).toString();
        //qDebug()<< m_ui->Table_CSV->indexAt(QPoint(2,2)).row() << " and " <<  m_ui->Table_CSV->indexAt(QPoint(2,2)).column();
        //qDebug()<<"Data="<<Data;
    
        //connect(m_ui->Table_CSV->model(), SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(on_Save_FUNC("/home/pi/can_V3/FileSystem/"+currentFilePath+".csv")));
        currentFilePath =FilePath;
        file.close();
    
    }
    

    And this is what i get at first when i click open:

    aa2ae38c-4af7-4bf0-8097-c4be41b3818e-image.png

    JonBJ 1 Reply Last reply
    0
    • I imene

      Hi ,
      How to insert new line imported from csv file in my QStandardItemModel in a TableView:
      This is the code in my main window.cpp:

      MainWindow::MainWindow(QWidget *parent) :
          QMainWindow(parent),
          m_ui(new Ui::MainWindow)
      {
          m_ui->setupUi(this);
      model = new QStandardItemModel(0,6,this);
          model->setHeaderData(0, Qt::Horizontal, "C 1", Qt::DisplayRole);
          model->setHeaderData(1, Qt::Horizontal, "C 2", Qt::DisplayRole);
          model->setHeaderData(2, Qt::Horizontal, "C 3", Qt::DisplayRole);
          model->setHeaderData(3, Qt::Horizontal, "C 4", Qt::DisplayRole);
          model->setHeaderData(4, Qt::Horizontal, "C 5", Qt::DisplayRole);
          model->setHeaderData(5, Qt::Horizontal, "C 6", Qt::DisplayRole);
      m_ui->Table_CSV->setModel(model);
      }
      

      This "model" is static how can i make it dynamic add, modify ,delete... this is what i get:
      5d3a406a-c7d4-4086-83a4-763e021a95dc-image.png

      First i've worked with this code for "open" csv file button but it doesn't work now because the model is static:

      MainWindow::MainWindow(QWidget *parent) :
          QMainWindow(parent),
          m_ui(new Ui::MainWindow)
      {
          m_ui->setupUi(this);
          model = new QStandardItemModel(this); //modified line
           m_ui->Table_CSV->setModel(model);
      }
      
      void MainWindow::on_Open_Button_clicked()
      {
      
      
          auto FilePath = QFileDialog::getOpenFileName(this, "Open", QDir::rootPath(), "CSV File(*.csv)");
          if(FilePath.isEmpty())
          {
              return ;
          }
          QFile file(FilePath);
          if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
          {
              return ;
          }
          QTextStream xin(&file);
          int ix = 0;
          while(!xin.atEnd())
          {
      
      
      
             //model->setRowCount(ix); //
                     // qDebug()<<"mModel->setRowCount(ix) "<<ix;
      
              auto line = xin.readLine();
              qDebug()<<"auto line = xin.readLine(); "<<line;
              auto values = line.split(",");
              qDebug()<<"auto values = line.split(""); "<<values ;
              const int colCount = values.size();
              qDebug()<<"const int colCount = values.size(); "<<colCount ;
              //model->setColumnCount(colCount);
              qDebug()<<"mModel->setColumnCount(colCount); "<<colCount ;
              for(int jx=0; jx<colCount; ++jx)
              {
                  setValueAt(ix, jx, values.at(jx));
                  qDebug()<<"setValueAt(ix, jx, values.at(jx)); "<< values.at(jx) ;
              }
              ++ix;
      
      
          }
      
          //QString Data = m_ui->Table_CSV->model()->data(m_ui->Table_CSV->model()->index(0,2)).toString();
          //qDebug()<< m_ui->Table_CSV->indexAt(QPoint(2,2)).row() << " and " <<  m_ui->Table_CSV->indexAt(QPoint(2,2)).column();
          //qDebug()<<"Data="<<Data;
      
          //connect(m_ui->Table_CSV->model(), SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(on_Save_FUNC("/home/pi/can_V3/FileSystem/"+currentFilePath+".csv")));
          currentFilePath =FilePath;
          file.close();
      
      }
      

      And this is what i get at first when i click open:

      aa2ae38c-4af7-4bf0-8097-c4be41b3818e-image.png

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

      @imene
      I don't know what you mean by "static". To "insert new line" (row) use, surprisingly, one of the QStandardItemModel::insertRows() overloads. Do you take the time to look through the https://doc.qt.io/qt-6/qstandarditemmodel.html page for this sort of question?

      1 Reply Last reply
      0
      • I Offline
        I Offline
        imene
        wrote on last edited by imene
        #3

        Thanks @JonB,
        Solved i do it this way:

        This is the code in my main window.cpp:

        MainWindow::MainWindow(QWidget *parent) :
            QMainWindow(parent),
            m_ui(new Ui::MainWindow)
        {
            m_ui->setupUi(this);
        mModel = new QStandardItemModel(0,6,this);
            mModel->setHeaderData(0, Qt::Horizontal, "C 1", Qt::DisplayRole);
            mModel->setHeaderData(1, Qt::Horizontal, "C 2", Qt::DisplayRole);
            mModel->setHeaderData(2, Qt::Horizontal, "C 3", Qt::DisplayRole);
            mModel->setHeaderData(3, Qt::Horizontal, "C 4", Qt::DisplayRole);
            mModel->setHeaderData(4, Qt::Horizontal, "C 5", Qt::DisplayRole);
            mModel->setHeaderData(5, Qt::Horizontal, "C 6", Qt::DisplayRole);
        m_ui->Table_CSV->setModel(mModel);
        }
        
        

        This line was commanted " //mModel->setRowCount(ix); //" :

        void MainWindow::on_Open_Button_clicked()
        {
        
        
            auto FilePath = QFileDialog::getOpenFileName(this, "Open", QDir::rootPath(), "CSV File(*.csv)");
            if(FilePath.isEmpty())
            {
                return ;
            }
            QFile file(FilePath);
            if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
            {
                return ;
            }
            QTextStream xin(&file);
            int ix = 0;
            while(!xin.atEnd())
            {
               mModel->setRowCount(ix); //was commented
                       // qDebug()<<"mModel->setRowCount(ix) "<<ix;
        
                auto line = xin.readLine();
                qDebug()<<"auto line = xin.readLine(); "<<line;
                auto values = line.split(",");
                qDebug()<<"auto values = line.split(""); "<<values ;
                const int colCount = values.size();
                qDebug()<<"const int colCount = values.size(); "<<colCount ;
                //mModel->setColumnCount(colCount);
                qDebug()<<"mModel->setColumnCount(colCount); "<<colCount ;
                for(int jx=0; jx<colCount; ++jx)
                {
                    setValueAt(ix, jx, values.at(jx));
                    qDebug()<<"setValueAt(ix, jx, values.at(jx)); "<< values.at(jx) ;
                }
                ++ix;
            }
           currentFilePath =FilePath;
            file.close();
        }
        
        

        9e62bb8a-2de5-4300-a0ba-0a1667e4ec89-image.png

        JonBJ 1 Reply Last reply
        0
        • I imene

          Thanks @JonB,
          Solved i do it this way:

          This is the code in my main window.cpp:

          MainWindow::MainWindow(QWidget *parent) :
              QMainWindow(parent),
              m_ui(new Ui::MainWindow)
          {
              m_ui->setupUi(this);
          mModel = new QStandardItemModel(0,6,this);
              mModel->setHeaderData(0, Qt::Horizontal, "C 1", Qt::DisplayRole);
              mModel->setHeaderData(1, Qt::Horizontal, "C 2", Qt::DisplayRole);
              mModel->setHeaderData(2, Qt::Horizontal, "C 3", Qt::DisplayRole);
              mModel->setHeaderData(3, Qt::Horizontal, "C 4", Qt::DisplayRole);
              mModel->setHeaderData(4, Qt::Horizontal, "C 5", Qt::DisplayRole);
              mModel->setHeaderData(5, Qt::Horizontal, "C 6", Qt::DisplayRole);
          m_ui->Table_CSV->setModel(mModel);
          }
          
          

          This line was commanted " //mModel->setRowCount(ix); //" :

          void MainWindow::on_Open_Button_clicked()
          {
          
          
              auto FilePath = QFileDialog::getOpenFileName(this, "Open", QDir::rootPath(), "CSV File(*.csv)");
              if(FilePath.isEmpty())
              {
                  return ;
              }
              QFile file(FilePath);
              if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
              {
                  return ;
              }
              QTextStream xin(&file);
              int ix = 0;
              while(!xin.atEnd())
              {
                 mModel->setRowCount(ix); //was commented
                         // qDebug()<<"mModel->setRowCount(ix) "<<ix;
          
                  auto line = xin.readLine();
                  qDebug()<<"auto line = xin.readLine(); "<<line;
                  auto values = line.split(",");
                  qDebug()<<"auto values = line.split(""); "<<values ;
                  const int colCount = values.size();
                  qDebug()<<"const int colCount = values.size(); "<<colCount ;
                  //mModel->setColumnCount(colCount);
                  qDebug()<<"mModel->setColumnCount(colCount); "<<colCount ;
                  for(int jx=0; jx<colCount; ++jx)
                  {
                      setValueAt(ix, jx, values.at(jx));
                      qDebug()<<"setValueAt(ix, jx, values.at(jx)); "<< values.at(jx) ;
                  }
                  ++ix;
              }
             currentFilePath =FilePath;
              file.close();
          }
          
          

          9e62bb8a-2de5-4300-a0ba-0a1667e4ec89-image.png

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

          @imene
          Well you don't seem to actually insert an extra row (I don't see insertRow()), but if you are happy that's good.

          1 Reply Last reply
          0
          • I Offline
            I Offline
            imene
            wrote on last edited by imene
            #5

            Thanks @JonB ,
            i'm working on it in a new topic right here:
            https://forum.qt.io/topic/138674/how-to-insert-new-row-under-a-selected-row-in-my-qstandarditemmodel-in-a-tableview/2
            And you helped me a lot.

            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved