@TaleFrance

QTableView. Файловый ВВОД-ВЫВОД. Как данные из QList вернуть в таблицу? Как ЗАПОЛНИТЬ таблицу из QLIST?

Здравствуйте! Прошу помочь с программой. Необходимо добавить возможность сохранения и загрузки таблицы из файла.

Перегрузка:
QDataStream&  operator<<(QDataStream&  stream, const MyCard& card)
{

    stream  <<  card._number  << card._name << quint32(card._sum)
             << quint32(card._profit) <<  quint32(card._rate)<<quint32(card._balance);

    return stream;
}

QDataStream& operator>>(QDataStream& stream, MyCard& card)
{
   stream  >>  card._number  >> card._name >>  card._sum >> card._profit >>  card._rate
                                                                   >>card._balance;
   // QString number;
  //  stream>>number;
    return stream;
}


Заполнение исходной модели данными в конструкторе

Card::Card(QObject *parent) : QAbstractTableModel(parent)
{
   int sum = 800;
    int profit = 700;
    int rate = 300;
    int balance = sum + profit - rate;

    MyCard z("8812913", "Person1", (qint32)sum, (qint32)profit, (qint32)rate, (qint32)balance);
    _card<<z;


    int sum1 = 500;
    int profit1 = 600;
    int rate1 = 300;
    int balance1 = sum1 + profit1 - rate1;

    MyCard z1("7812913", "Person2", sum1, profit1, rate1, balance1);
    _card<<z1;

}



QList<MyCard> Card::card() const
{
    return _card;
}


void MainWindow::on_Write_triggered() // Запись
{

QString file_name = QFileDialog::getSaveFileName(this, "Open a file", "C:/files/myfile.txt");
QFile file(file_name);
QList x = _card.card(); // Получаем данные

if (!file.open(QFile::WriteOnly))
{
QMessageBox:: warning(this, "title", "file not open");
}

QDataStream out(&file);
out.setVersion(QDataStream::Qt_4_1);

out << x; // Запись таблицы в файл

file.close();
}

void MainWindow::on_Read_triggered()     // Чтение
{
    QString file_name = QFileDialog::getOpenFileName(this, "Open a file", "C:/files/myfile.txt", tr("Text Files (*.txt);;C++ Files (*.cpp *.h)"));

    QFile file(file_name);

    if (!file.open(QFile::ReadOnly))
    {
        QMessageBox:: warning(this, "title", "file not open");
    }


QDataStream in(&file);
 in.setVersion(QDataStream::Qt_4_1);
QList<MyCard> card;

in >> card;   
// КАК ЗАПОЛНИТЬ ТАБЛИЦУ ИЗ card?

if(!card.isEmpty())
{
    QMessageBox:: warning(this, "title", "ne pustoy");
}

    file.close();
}


Как реализовать подобное заполнение? Я не понимаю, что делать. Нужно использовать только QList и QTableView
6045c3a1b19a9908228897.png

Это я так в файл записал (Write)
  • Вопрос задан
  • 1007 просмотров
Пригласить эксперта
Ответы на вопрос 2
Реализуете источник данных, напрмер QList в ваше модели. Реализуете метод, который будет добавлять данные в источник в ваше модели. Отображение данных в модели, соответствнно, тоже делаете из данного источника. https://evileg.com/ru/forum/topic/419/
Ответ написан
Zifix
@Zifix Куратор тега Qt
Barbatum
Прочитайте любую книгу по Qt (Саммерфилда, например), сэкономите недели времени на подобных базовых вещах, типа моделей.

Можно ещё QTableWidget взять, с ним попроще работать, но на больших объемах он будет тормозить, да и код получится так себе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы