Чтение string из бинарного файла при помощи QDataStream

227
20 июля 2018, 04:50

Осваиваю qt, нужно реализовать запись структуры worker из текстовых полей в бинарный файл workers.dat а затем считать все записи из этого файла и вывести в MessageBox в порядке возрастания wsalary

    #include <QFile>
    #include <QDataStream>
    #include <QMessageBox>
    using namespace std;
    const char FName[] = "workers.dat";
    struct worker{
        string wname;
        string wlastname;
        int wsalary;
    };
    QDataStream &operator >> (QDataStream &stream, const worker &A) {
        stream >> A.wname; //invalid operands to binary expression('QDataSDtream' and 'const std::string')
        stream >> A.wlastname;//invalid operands to binary expression('QDataSDtream' and 'const std::string')
        stream >> A.wsalary//invalid operands to binary expression('QDataSDtream' and 'const std::string')
    }
    void MainWindow::on_ReadFilepushButton_clicked()
    {
        worker man;
        QString s = "";
        QFile file (FName);
        QDataStream stream(&file);
        file.open(QIODevice::ReadOnly);
        //записать в цикле содержимое файла в QString s
        file.close();
        QMessageBox::about(this, FName, s);
    }

С записью структуры в файл проблем вроде нет, а с чтением непонятно что делать: как передать содержимое в QString s, так же непонятно как правильно реализовать цикл для записи содержимого файла в QString s

Answer 1

Итоговый правильный вариант

#include <QFile>
#include <QDataStream>
#include <QMessageBox>
using namespace std;
const char FName[] = "workers.dat";
struct worker{
    QString wname;
    QString wlastname;
    int wsalary;
};
void MainWindow::on_ReadFilepushButton_clicked()
{
    worker man;
    QString s = "";
    QFile file (FName);
    QDataStream output(&file);
    int i = 0;
    if(file.open(QIODevice::ReadOnly)){
        while(!output.atEnd()){
            output >> man.wname >> man.wlastname >> man.wsalary;
                i++;
                s += QString::number(i) + ") "
                    + man.wname + " "
                    + man.wlastname + " "
                    + QString::number(man.wsalary) + "\n";
        }
        file.close();
        QMessageBox::about(this, FName, s);
    } else
        QMessageBox::critical(this, FName, "file does not exist");
}
READ ALSO
Можете ответить на вопросы по поводу web.xml в javaEE, там про аутентификацю?

Можете ответить на вопросы по поводу web.xml в javaEE, там про аутентификацю?

Щас дошёл до темы в webxml - аутентификация пользователей и есть пару вопросов: 1) Ест такой код:

205
Локализация проекта Android

Локализация проекта Android

Полностью конкретного ответа на вопрос не нашел в инете, поэтому ищу помощи тут

200
Получение цвета данного пикселя

Получение цвета данного пикселя

Как при наведении мышки узнать соответствует ли пиксель данному цвету или нет?

180
Заполнение Exel формы

Заполнение Exel формы

Имеется шаблон формы которую нужно заполнить

149