2 votes

Lire et écrire dans un fichier à partir d'un QTableView

Comment puis-je lire et écrire dans un fichier texte la date entrée dans un QTableView?

Voici ce que j'ai mais j'aimerais sauvegarder les données lorsqu'elles sont ajoutées au tableau et bien sûr pouvoir les relire lorsque l'application est rouverte. Y a-t-il un tutoriel auquel je pourrais me référer?

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    model = new QStandardItemModel();
    model->setRowCount(0);
    ui->tableView->setModel(model);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QStandardItem *userName = new QStandardItem(ui->lineEdit_Name->text());
    QStandardItem *userNumber = new QStandardItem(ui->lineEdit_Number->text());

    QList row;
    row <appendRow(row);
}

Merci beaucoup

EDIT --------------------------------

Voici ce qui a fonctionné pour moi:

Ajouter la fonction:

 void MainWindow::on_pushButto_Add_clicked() {
     QStandardItem *userInput = new QStandardItem(ui->lineEdit->text());
     QStandardItem *userInput2= new QStandardItem(ui->lineEdit_2->text());

     QList row;
     row <appendRow(row); 
}

Enregistrer la fonction:

void MainWindow::on_pushButton_Save_clicked()
{
    QFile file("C:/Users/UserName/Practicing/Resources_Files/someFile.bin");

     if (file.open(QIODevice::WriteOnly))
     {
         QDataStream stream(&file);
         qint32 n = model->rowCount();
         qint32 m = model->columnCount();
         stream << n << m;

         for (int i=0; iitem(i,j)->write(stream);
            }
          }
        file.close();
      }
}

Charger la fonction:

void MainWindow::on_pushButton_Load_clicked()
{

    QFile file("C:/Users/UserName/Practicing/Resources_Files/someFile.bin");
    if (file.open(QIODevice::ReadOnly))
    {
       QDataStream stream(&file);
        qint32 n, m;
        stream >> n >> m;
        model->setRowCount(n);
        model->setColumnCount(m);

        for (int i = 0; i < n ; ++i) {
               for (int j = 0; j < m; j++) {
                   QStandardItem *item = new QStandardItem;
                   item->read(stream);
                   model->setItem(i, j, item);
               }
           }

     file.close();
    }
}

6voto

Marek R Points 4503
QFile file("somefile.bin");

if (file.open(QIODevice::WriteOnly)) {
    QDataStream stream(&file);
    stream << *(model->invisibleRootItem());
    file.close();
}

http://qt-project.org/doc/qt-5.0/qtgui/qstandarditemmodel.html#invisibleRootItem


Edit:

Voici la correction (J'ai vérifié que cela fonctionne).

void MainWindow::save()
{
    QFile file("somefile.bin");
    if (file.open(QIODevice::WriteOnly)) {
        QDataStream stream(&file);
        qint32 n(model->rowCount()), m(model->columnCount());
        stream << n << m;

        for (int i=0; iitem(i,j)->write(stream);
        file.close();
    }
}

void MainWindow::load()
{
    QFile file("somefile.bin");
    if (file.open(QIODevice::ReadOnly)) {
        QDataStream stream(&file);
        qint32 n, m;
        stream >> n >> m;

        model->setRowCount(n);
        model->setColumnCount(m);
        for (int i=0; iitem(i,j)->read(stream);
        file.close();
    }
}

1voto

Dimitry Ernot Points 5398

Vous pouvez parcourir votre modèle ligne par ligne, colonne par colonne et remplir un fichier avec un format comme CSV (une ligne par ligne et des colonnes séparées par une virgule ou des tabulations).

Cependant, je ne pense pas que ce soit une bonne idée de modifier le fichier lorsque qu'un élément a changé. Vous devriez écrire le fichier lorsque votre application est fermée.

0voto

Liju G. Chacko Points 11

modèle->élément(i,j)->écrire(fluide); conduira à erreur de segmentation si élément(i,j) est vide. Affectez une valeur fictive comme un espace blanc dans les cellules vides.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X