How to insert new line imported from csv file in my QStandardItemModel in a TableView ?
-
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:
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:
-
@imene
I don't know what you mean by "static". To "insert new line" (row) use, surprisingly, one of theQStandardItemModel::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? -
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(); }