Нужно ли переписывать функцию для работы в QT? - PullRequest
1 голос
/ 18 мая 2011

У меня есть две функции, одна из которых сохраняет содержимое моего массива в текстовый файл, и функция, которая считывает то же самое в массив. Все было написано в VS, и теперь я пытаюсь сделать графический интерфейс для моего приложения. Моя функция сохранения в файл работает как чудо, но когда я пытаюсь прочитать этот файл в QT с моей функцией чтения, ничего не происходит. Нужно ли переписывать функцию, чтобы она работала в QT? если нет то в чем может быть проблема? Что я могу "выбросить", если in.fail ()?

 void DH::read()
{

    ifstream in("text.txt");
    string strKcal=" ";
    int kcal=0;
    string strCarb=" ";
    double carb=0.0;
    string strProtein=" ";
    double protein=0.0;
    string strLipid=" ";
    double lipid=0.0;
    string name;
    string usrName;
    string usrName1;
    string usrName2;
    string date;
    string nrs;
    getline(in,nrs);
    this->nrOfDiets=atoi(nrs.c_str());


    if(!in.fail())
    {
        for(int i=0;i<this->nrOfDiets && in.good();i++)
        {
            getline(in,usrName1,' ');
            getline(in,usrName2);
            usrName=usrName1+ " " + usrName2;
            getline(in,date);
            getline(in,name,'\t');
            getline(in,strKcal,'\t');
            getline(in,strCarb,'\t');
            getline(in,strProtein,'\t');
            getline(in,strLipid);


            kcal=atoi(strKcal.c_str());
            carb=atoi(strCarb.c_str());
            protein=atoi(strProtein.c_str());
            lipid=atoi(strLipid.c_str());


            this->dh[i]=new Diet(name,kcal,protein,carb,lipid,usrName,date);

        }
    }
    else
        //cout<<"Error!"<<endl;

    in.close();
}

Я знаю, что мог бы использовать в >> вместо getline все время, но по какой-то причине это не сработало: S

1 Ответ

1 голос
/ 18 мая 2011

Как правило, нет, вам не нужно делать что-то по-другому, чтобы корректный код работал как часть приложения Qt. Я не изучил ваш код подробно, но, по крайней мере, он выглядит хорошо.

Однако есть некоторые вещи, которые будут другими. Прежде всего, управление в графических программах обычно происходит наизнанку из программ командной строки. Вы не собираетесь писать поток программы явно. Вместо этого вы будете реагировать на события (нажатия кнопок, выбор меню и т. Д.). Во-вторых, вы обычно запускаете их с помощью другого метода запуска (щелчок по значку или запуск из среды IDE), который может изменять такие вещи, как текущий рабочий каталог программы.

Без дополнительной информации мы не можем сказать вам, в чем ваша проблема. Но я бы проверил, что программа на самом деле работает из каталога, где относительный путь "text.txt" относится к допустимому файлу. Кроме того, и это может показаться странным, но убедитесь, что ваш код действительно вызывается.

Кстати, ваше последнее предложение об операторе >> против getline ... иногда неплохо просто перейти к чему-то, что работает, но вам, вероятно, будет хорошо потратить время на то, чтобы понять такие вещи когда сможешь. Изучение того, почему что-то не делает того, о чем вы думали, может впоследствии сэкономить вам огромное количество времени и разочарования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...