Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Kensant от Сентябрь 30, 2016, 18:12



Название: Qt чтение текстового файла и запись в разные label
Отправлено: Kensant от Сентябрь 30, 2016, 18:12
Доброго времени суток, с Qt работаю совсем немного и столкнулся с проблемой.
Не могу разобраться как сделать, что бы из файла, первая строка с текстом была записана в три разных label(например label1, label2, label3), которые есть на главной форме, а после нажатия на кнопку, была следующая строка, так же записана в три разных label, с заменой предыдущего текста.
Текстура текстового файла:
"Текст1;Текст2;Текст3;
 Текст11;Текст12;Текст13;
 ... "
Помогите, пожалуйста, разобраться в этом.


Название: Re: Qt чтение текстового файла и запись в разные label
Отправлено: Bepec от Сентябрь 30, 2016, 19:48
Открываете файл - QFile.
Читаете строки в QStringList.
При каждом нажатии кнопочки прибавляете единицу к переменной индекса.
Разбиваете строку на подстроки используя разделитель. QStringList tempList = listMyString[index].split(";");  и получаете три строки.
Делаете ui.label1->setText(tempList[1]); и так далее. Финита.


Название: Re: Qt чтение текстового файла и запись в разные label
Отправлено: gil9red от Сентябрь 30, 2016, 20:07
При каждом нажатии кнопочки прибавляете единицу к переменной индекса.

Или у списка вызываете метод takeFirst (http://doc.qt.io/qt-5/qlist.html#takeFirst)(), чтобы получить вытащить первый элемент списка, после чего список уменьшится


Название: Re: Qt чтение текстового файла и запись в разные label
Отправлено: Kensant от Октябрь 01, 2016, 07:51
Можно кусочек когда, как пример?


Название: Re: Qt чтение текстового файла и запись в разные label
Отправлено: gil9red от Октябрь 01, 2016, 09:28
Можно кусочек когда, как пример?

Считывание построчно из файла в список (для вашего примера список будет в полях класса):
Код
C++ (Qt)
 
   QFile file("txt.txt");
   if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
       qDebug() << file.errorString();
       return 1;
   }
 
   QStringList lines;
 
   QTextStream in(&file);
   while (!in.atEnd()) {
       QString line = in.readLine();
       lines.append(line);
   }

А теперь получение первого элемента из списка и разделение его по символу ";":
Код
C++ (Qt)
QStringList parts = lines.takeFirst().split(";");

Перед вызывом takeFirst проверяйте, что lines не пустой.


Название: Re: Qt чтение текстового файла и запись в разные label
Отправлено: Kensant от Октябрь 01, 2016, 10:34
А как это раскидать по 3 разным лейбам?


Название: Re: Qt чтение текстового файла и запись в разные label
Отправлено: Igors от Октябрь 01, 2016, 10:37
А как это раскидать по 3 разным лейбам?
Вот бывают такие посты от которых прямо хочется удавиться и никогда не посещать такой форум  :'(


Название: Re: Qt чтение текстового файла и запись в разные label
Отправлено: Old от Октябрь 01, 2016, 11:23
Вот бывают такие посты от которых прямо хочется удавиться и никогда не посещать такой форум  :'(
Наступила осень - началась учеба. :)
Первые лабораторки... :)


Название: Re: Qt чтение текстового файла и запись в разные label
Отправлено: gil9red от Октябрь 01, 2016, 21:18
А как это раскидать по 3 разным лейбам?

split (http://doc.qt.io/qt-5/qstring.html#split) возвращает список строк -- QStringList (http://doc.qt.io/Qt-5/qstringlist.html)
Чтобы быть уверенным, выведите его, например через qDebug: qDebug() << list; // Для использования qDebug нужно подключить через #include <QDebug>

У списка берете по индексам значения и для каждого лейбла вставляете текст (вызываете функцию setText (http://doc.qt.io/Qt-5/qlabel.html#text-prop))