- •Лабораторная работа №1
- •Москва 2023
- •Создать виджет с надписью «Архангельский м. В.», задать размер виджета, вывести его на экран. В качестве виджета использовать кнопку (объект button класса qPushButton).
- •Создать текстовую метку при помощи класса qLabel, в текстовой метке записать текст «Архангельский м. В.». Вывести сообщение с использованием указателей и класса qLabel.
- •Повторить предыдущий пункт задания без использования указателей.
- •Создать кнопку при помощи класса qPushButton с текстом «Архангельский м. В.». При нажатии на кнопку должно происходить завершение работы программы.
- •Используя события таймера, через каждые 200 мс выводить в текстовую метку сообщение «Архангельский м. В.».
- •Используя Qt Designer, разместить на форме объект класса qLabel (текстовую метку), в которую необходимо выводить текущее время (ежесекундно).
- •Используя объекты класса qFile, скопировать содержимое одного бинарного файла в другой блоками по 2 символа, при этом осуществить проверку на возможность открытия файлов для чтения и записи.
- •Повторить предыдущий пункт задания с использованием объектов класса qByteArray
- •Используя объекты класса qTextStream, построчно считать содержимое текстового файла и вывести его в консоль.
- •Повторить предыдущий пункт задания с использованием метода readAll(). Записать текстовую информацию в файл, предварительно отформатировав текст.
- •Контрольные вопросы
Используя объекты класса qFile, скопировать содержимое одного бинарного файла в другой блоками по 2 символа, при этом осуществить проверку на возможность открытия файлов для чтения и записи.
Создам в папке с проектом файл с именем "here_is_the_text.txt", внесём в него текстовую информацию. Аналогично создам пустой файл с именем "copy.txt".
Листинг 10. Содержание файла "main.cpp"
#include <QApplication> // подключили заголовочные файлы с определениями классов QApplication (приложение)
#include <QFile> // QFile (класс для проведения операций с файлами)
#include <QBuffer> // QBuffer (позволяет записывать и считывать данные в массив QByteArray, как будто бы это устройство или файл)
#include <QDebug>
int main(int argc, char *argv[ ])
{
QApplication app(argc, argv);
QFile file("here_is_the_text.txt");
QFile copy_file("copy.txt");
if(copy_file.exists())
{
//Файл уже существует. Перезаписать?
}
if (!file.open(QIODevice::ReadOnly))
{
qDebug() << "Ошибка открытия для чтения";
}
if(!copy_file.open(QIODevice::WriteOnly))
{
qDebug() << "Ошибка открытия для записи";
}
char a[1];
while(!file.atEnd())
{
int nBlocksize = file.read(a, sizeof(a));
copy_file.write(a, nBlocksize);
}
file.close(); // обязательно необходимо закрыть файлы (потоки ввода/вывода)
copy_file.close();
return app.exec( );
}
Рисунок 9. Файл copy.txt после завершения работы программы.
Повторить предыдущий пункт задания с использованием объектов класса qByteArray
Листинг 11. Содержание файла "main.cpp"
#include <QApplication> // подключили заголовочные файлы с определениямиклассов QApplication (приложение)
#include <QFile> // QFile (класс для проведения операций с файлами)
#include <QBuffer> // QBuffer (позволяет записывать и считывать данные вмассив QByteArray, как будто бы это устройство или файл)
#include <QDebug>
int main(int argc, char *argv[ ])
{
QApplication app(argc, argv);
/*Если требуется считать или записать данные за один раз, то используют
методы QIODevice::write()и QIODevice::readAll().
Все данные можно считать в объект классаQByteArray,
а потом записать из него в другой файл
*/
QFile file("text.txt");
QFile copy_file("copy_text.txt");
if(copy_file.exists())
{
//Файл уже существует. Перезаписать?
}
if(!file.open(QIODevice::ReadOnly))
{
qDebug() << "Ошибка открытия для чтения";
}
if(!copy_file.open(QIODevice::WriteOnly))
{
qDebug() << "Ошибка открытия для записи";
}
QByteArray a = file.readAll();
copy_file.write(a);
file.close();
copy_file.close();
return app.exec( );
}
Рисунок 10. Файл copy_text.txt после завершения работы программы.
Используя объекты класса QBuffer, осуществить вывод текстовой строки «Arkhangelskiy M.V.» в консоль.
Листинг 12. Содержание файла "main.cpp"
#include <QApplication> //подключили заголовочные файлы с определениями классов QApplication (приложение)
#include <QBuffer> // QBuffer (позволяет записывать и считывать данные в массив QByteArray, как будто бы это устройство или файл)
#include <QDebug>
#include <QDataStream>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QByteArray arr;
QBuffer buffer(&arr);
buffer.open(QIODevice::WriteOnly);
QDataStream out(&buffer);
out << QString("Arkhangelskiy M. V.");
qDebug()<<arr;
/*сами данные сохраняются внутри объекта класса QByteArray.
При помощи метода buffer() можно получить константную ссылку к
внутреннему объекту QByteArray
*/
return app.exec( );
}
Рисунок 11. Вывод текстовой строки в консоль