Шаг 97.
Библиотека Qt.
Класс QTextStream

    На этом шаге рассмотрим класс QTextStream.

    Класс QTextStream предназначен для чтения текстовых данных. В качестве текстовых данных могут выступать не только объекты, созданные классами, унаследованными от QIODevice, но и переменные типов char, QChar, char*, QString, QByteArray, short, int, long, float и double. Пример использования объекта класса QTextStream приведен в шаге 86.

    Числовые данные, передаваемые в поток, автоматически преобразуются в текст. Можно управлять форматом их преобразования, например метод QTextStream::setRealNumberPrecision() задает количество знаков после запятой. Этот класс следует использовать для считывания и записи текстовых данных в формате Unicode. Чтобы считать текстовый файл, необходимо создать объект типа QFile и считать данные методом QTextStream::readLine(). Например:

QFile file("file.txt");
if (file.open(QIODevice::ReadOnly))
{
    QTextStream stream(&file);
    QString str;
    while (!stream.atEnd())
    {
        str = stream.readLine();
        qDebug() << str;
    }
    //если status() не вернул статус, указывающий на то, что
    //объект класса QTextStream работает нормально
    if (stream.status() != QTextStream::Ok)
    {
        qDebug() << "Ошибка чтения файла";
    }
    file.close();
}

    Файлы приложения можно взять здесь.

    Результат работы приложения приведен на рисунке 1.


Рис.1. Вывод содержимого файла по строкам

    Методом QTextStream::readAll() можно считать сразу весь текстовый файл в строку. Например:

QFile file("file.txt");
if (file.open(QIODevice::ReadOnly))
{
    QTextStream stream(&file);
    QString str = stream.readLine();
    qDebug() << str;
    if (stream.status() != QTextStream::Ok)
    {
       qDebug() << "Ошибка чтения файла";
    }
    file.close();
} 

    Файлы приложения можно взять здесь.

    Результат работы приложения приведен на рисунке 2.


Рис.2. Вывод содержимого файла целиком

    Чтобы записать текстовую информацию в файл, необходимо создать объект класса QFile и воспользоваться оператором <<. Перед записью можно провести необходимые преобразования строки. Например:

QFile file("file.txt");
QString str = "QTextStream stream(&file);";
if (file.open(QIODevice::WriteOnly))
{
    QTextStream stream(&file);
    qDebug() << "Запись строки " << str << "в файл.
         \nСтрока будет записана заглавными буквами.";
    stream << str.toUpper();
    file.close();
    if (stream.status() != QTextStream::Ok)
    {
        qDebug() << "Ошибка записи файла";
    }
}
qDebug() << "Содержимое файла FILE.TXT";
if (file.open(QIODevice::ReadOnly))
{
    QTextStream stream(&file);
    str = stream.readLine();
    qDebug << str;
    if (stream.status() != QTextStream::Ok)
    {
        qDebug() << "Ошибка чтения файла";
    }
    file.close();
}

    Файлы приложения можно взять здесь.

    Результат работы приложения приведен на рисунке 3.


Рис.3. Запись строки в файл

    Класс QTextStream создавался для записи и чтения только текстовых данных, поэтому двоичные данные при записи будут искажены. Для чтения и записи двоичных данных без искажений следует пользоваться классом QDataStream.

    На следующем шаге рассмотрим класс QDataStream.




Предыдущий шаг Содержание Следующий шаг