Qt creator сравнить два файла

Обновлено: 07.07.2024

Обычно используемые статические функции:
QFileDialog :: getOpenFileName () // Получить указанный путь к файлу и вернуть QString
QFileDialog :: getExistingDirectory () // Получить указанный путь и вернуть QString
QFileDialog :: getSaveFileName () // Получить указанное имя пути сохранения и вернуть QString

Класс вспомогательного использования:
Класс QFileInfo получает информацию о файле;
Класс QFileInfo используется для чтения информации атрибутов файла

Примеры использования QFile:

QT делит файлы на текстовые файлы и файлы данных.Содержимое текстовых файлов - это читаемые текстовые символы, а содержимое файлов данных - двоичные данные.

QFile напрямую поддерживает работу с текстовыми файлами и файлами данных.Основные функциональные интерфейсы следующие:
qint64 read (char * data, qint64 maxSize) // чтение потока данных
QByteArray read (qint64 maxSize) // Чтение в режиме текстового потока
QByteArray readAll () // Чтение в режиме текстового потока
QByteArray readLine () // Чтение в режиме текстового потока
qint64 write(const char * data, qint64 maxSize)
qint64 write(const QByteArray & byteArray)

Чтобы упростить операции чтения и записи текстовых файлов и файлов данных, QT предоставляет вспомогательные классы для QTextStream и QDataStream.
QTextStream может преобразовывать все записанные данные в читаемый текст.
QDataStream может преобразовывать записанные данные в двоичные данные в соответствии с типом.
QTemporaryFile - это класс работы с временным файлом в QT, который используется для безопасного создания глобально уникального временного файла. Соответствующий временный файл будет удален при уничтожении объекта QTemporaryFile. Метод открытия временного файла - QIODevice: : ReadWrite, временные файлы часто используются для передачи больших объемов данных или межпроцессного взаимодействия.

1. QTextStream

2. QDataStream

Создать объект потока QDataStream date;

Сохраните данные в потоке date >> a >> b;
int a= xxxx;
string b = “xxxxxxxxx” ;

Удалить данные из потока date << aa << bb;
int aa;
string bb;

QDataStream может иметь разные форматы файлов потоков данных в разных версиях QT.Если файл потока данных необходимо передать между разными версиями программ QT, необходимо рассмотреть вопрос о версии.
void setVersion(int v)
int version() const
QTextStream Class

Чтобы управлять файлами в текстовом режиме:
Создать объект потока QDataStream date;
date.setCodec (); Поддержка настроек кодировки для чтения файлов (эффективно решает проблему искаженных кодов)
Если при записи двоичного кода вам нужно писать только в исходную память, не забудьте использовать функцию
int QDataStream::writeRawData(const char *s, int len)
вместо следующего, writeBytes ниже автоматически запишет дополнительную длину и другие данные
QDataStream &QDataStream::writeBytes(const char *s, uint len)

Пример использования QDataStream 1:
Прочитать

Пример использования QDataStream 2:

3. QBuffer

Класс QBuffer предоставляет интерфейс QIODevice для QByteArray.

В настоящее время это сначала понимается как создание файла кеша;
QT предопределяет класс буфера QBuffer, который можно рассматривать как специальное устройство ввода-вывода, а вспомогательный класс файлового потока можно напрямую использовать для управления буфером. Данные, записываемые и считываемые из буфера QBuffer, должны иметь один и тот же тип данных, и несколько типов данных нельзя смешивать.

Случаи использования QBuffer:
A. Различные типы передачи данных между потоками
Б. Кешируйте данные с внешних устройств для возврата
В. Скорость чтения данных ниже скорости записи.

Примеры использования QBuffer:

Резюме: основные методы операций чтения и записи: read (); readAll (); readline (), write ();

приложение:
Операции с каталогом
1. QDir QT предоставляет класс операций с каталогом QDir. Функции QDir следующие:
A. Единообразное использование разделителей каталогов ’/’
Б. Возможность выполнять произвольные операции с каталогом (создание, удаление, переименование)
В. Возможность получить все записи (файлы и папки) в указанном каталоге.
D, может использовать строку фильтра для получения указанного элемента
E. Возможность получить все корневые каталоги в системе

Как использовать QDir:

2、QFileSystemWatcher
QT предопределяет класс QFileSystemWatcher для отслеживания изменений файлов и каталогов,

Основные функции QFileSystemWatcher следующие:

А. Возможность отслеживать состояние определенных каталогов и файлов
Б. Возможность одновременного мониторинга нескольких файлов и каталогов
C. Запускать сигнал при изменении каталога или файла.
D. Улавливание сигналов и реагирование на них с помощью механизма сигналов и слотов.

Обычно для использования QFileSystemWatcher требуется специальный класс мониторинга файлов.

На этом уроке мы рассмотрим работу с файлами и каталогами в Qt5. Для этого мы будем использовать следующие классы:

QFile , QDir и QFileInfo — основные классы для работы с файлами в Qt5;

QFile — предоставляет интерфейс для чтения и записи информации в файлы;

QDir — обеспечивает доступ к структуре каталогов и к их содержимому;

QFileInfo — предоставляет информацию о файле, включая его имя и расположение в файловой системе, время доступа и изменения, имя владельца файла и текущие разрешения.

Размер файла

Для определения размера файла в классе QFileInfo предусмотрен метод size():

// Имя файла передается в качестве аргумента в нашу программу qWarning ( "The file does not exist" ) ; // если файл не найден, то выводим предупреждение и завершаем работу программы qint64 size = fileinfo . size ( ) ; // qint64 - это тип данных, который гарантированно будет 64-битным на всех платформах, поддерживаемых Qt

Для запуска программы проделайте следующие шаги:

ПОДГОТОВКА:

Шаг №1: Скомпилируйте вашу программу. Для этого выберите в меню "Сборка" > "Собрать всё" (или нажмите Ctrl+Shift+B ).

Шаг №2: Зайдите в папку, где лежит ваш Qt-проект (у меня он расположен в C:\dev\Qt_Project ).

Шаг №3: После выполнения первого шага у вас должна появиться еще одна папка, в которой будет создан исполняемый файл программы. Т.к. я использую компилятор MinGW 32-bit и режим компиляции Debug, то при компиляции проекта Qt автоматически создал папку build-My_QtApplication-Desktop_Qt_5_13_0_MinGW_32_bit-Debug .

Шаг №4: Зайдите в папку debug (она находится внутри папки, созданной на шаге №3).

Шаг №5: Найдите *.exe-файл вашей программы (у меня это file_size.exe ).

Шаг №6: Скопируйте этот файл в папку к соответствующему компилятору (напомню, т.к. я использовал компилятор MinGW 32-bit, то у меня этот путь выглядит следующим образом: C:\Soft\Qt\5.13.0\mingw73_32\bin ).

ЗАПУСК ПРОГРАММЫ:

Шаг №7: Откройте командную строку.

Шаг №8: Перейдите в папку, указанную в шаге №6 ( cd C:\Soft\Qt\5.13.0\mingw73_32\bin ).

Шаг №9: Запустите свою программу, передав ей в качестве параметра имя любого файла (у меня этим файлом оказалась эта же программа, поэтому в моем случае команда была следующей: file_size.exe file_size.exe ).

Результат выполнения программы:



Чтение содержимого файлов

Для того, чтобы прочитать содержимое файла, мы должны сначала открыть этот файл в режиме чтения, затем создать входящий файловый поток, из которого мы будем считывать данные. В примере, приведенном ниже, мы считываем данные из файла C:\colours.txt . Файл содержит названия семи цветов, вот его содержимое:

Red
Green
Black
Yellow
Purple
Blue
White


Решил тут ради интереса немного почитать про такую библиотеку, как Qt. Заинтересовала она меня именно в плане создания GUI, так как в C++ с этим достаточно туго, а Qt - одна из немногих кроссплатформенных библиотек, позволяющая удобно делать современные гибкие графические интерфейсы к программам. Раньше с ней совершенно никакого опыта работы я не имел, поэтому пару недель занимался неспешным чтением документации.

В какой-то из версий Qt (если не ошибаюсь, в 4.7) появилась возможность делать интерфейсы на декларативном языке QML 1.0 (и модуль QtDeclarative, определяющий всякие штуки для рисования интерфейсов), а в 5-й версии Qt появился QML 2.0 и QtQuick 2.0 (бывший QtDeclarative). Их я и стал изучать. В этой статье я расскажу об этих модулях в меру своих знаний, покажу пару несложных примеров их использования, а кто дочитает до конца статьи, получит еще один бонусный пример, который я написал, пока изучал библиотеку. :)

А пока что, чтобы не быть голословным, приведу простой пример, как с этим вообще работать (скриншоты будут с Windows, но то же самое совсем не сложно будет проделать и на другой ОС, например, Ubuntu или Mac OS).

1. Для начала нужно скачать онлайн-инсталлятор Qt последней версии. Можно скачать и оффлайн-инсталлятор на выбор. Для Windows доступны сборки с OpenGL и с ANGLE (это переходник с DirectX под интерфейс OpenGL). Разработчики Qt утверждают, что ANGLE под Windows сейчас работает стабильнее (по крайней мере, в версии 5.4.1, для которой я всё и описываю), особенно на старых системах, поэтому можно установить сборку с его использованием.

2. Теперь инсталлируем Qt. У вас уже должна быть установлена какая-нибудь Visual Studio. У меня есть 2013, поэтому для нее я сборку и скачивал.

3. Запускаем Qt Creator, в нем и будем вести разработку. Можно, конечно, разрабатывать и в Visual Studio, установив для этого специальный аддон Qt для Visual Studio, но в этом случае у вас не будет кроссплатформенных файлов проектов, которые можно открыть в программе Qt Creator на другой ОС, кроме того, будет меньше удобств при работе непосредственно с Qt и QML.

В Qt огромное количество различных примеров, по которым можно учиться. Например, можно просмотреть все примеры по теме Qt Quick. Для этого нужно выбрать секцию "Examples" в Qt Creator и в строку поиска ввести "quick":


Но мы сейчас создадим простейшее приложение с использованием Qt Quick на языке QML с нуля. Для этого выбираем секцию "Projects" и нажимаем "New project". Выбираем тип проекта "Application", "Qt Quick Application":


Этот тип приложения подразумевает программу на C++ с использованием QML. Необходимый код на C++ за нас сгенерируется автоматически, поэтому можно будет написать приложение на чистом QML и JavaScript. Нажимаем "Choose", вводим имя проекта (я задал mytest) и указываем, в какой директории его создавать, нажимаем "Next". Далее будет предложено выбрать набор компонентов, с использованием которых мы будем делать наш интерфейс. Здесь можно выбрать Qt Quick последней версии (2.4), этот выбор в любом случае никак не будет вас ограничивать и нужен только для того, чтобы Qt Creator смог сгенерировать набор импортов в файлах интерфейса, которые он создаст, и сами файлы по умолчанию. Итак, нажимаем "Next". Теперь выбираем настройки сборки (версия библиотеки Qt и Visual Studio). Если вы скачивали только одну версию Qt для какой-то конкретной версии Visual Studio, то у вас будет доступен единственный выбор:


Нажимаем "Next", затем "Finish", и Qt Creator генерирует тестовый проект для нас. Этот проект будет содержать один простой файл с кодом на C++ и пару файлов на QML:

Можно собрать и запустить проект, нажав Ctrl+R. Это обычный "Hello, World":

Сегодня практически невозможно представить приложение, в котором нет графического интерфейса пользователя (GUI -Graphical User Interface). Windows API обладает необходимыми инструментами для создания GUI. Однако их использование требует больших затрат времени и практического опыта. Даже библиотека MFC, которая призвана облегчить процесс написания GUI приложений на С++ для ОС Windows, не дает той простоты и легкости создания программ, как хотелось бы. Но самый большой недостаток этих инструментов и библиотек — это платформозависимость. В отличие от MFC библиотека Qt кроссплатформенная. При этом она предоставляет возможности создавать GUI в интерактивном режиме.


В открывшемся окне для выбора модулей нажимаем кнопки Next>Finish (модули по умолчанию). В результате создается шаблон проекта со следующим кодом в файле main.cpp:


Запускаем программу (клавиша F5). Тест пройден успешно, если открывается окно консоли:


Если при запуске возникают ошибки, вероятнее всего это связано с отсутствием каких-либо необходимых компонентов в VS. Запустите снова онлайн-инсталлятор Visual Studio 2017 и доустановите их в соответствии с рекомендациями (см. Установка Visual Studio 2017 и Installing Visual Studio 2017 + Qt Interface Library).

Давайте распечатаем «Hello World», изменив исходный файл:

Класс QCoreApplication предоставляет цикл обработки событий для консольных приложений Qt. Для приложений с графическим интерфейсом мы будем использовать QApplication. При вызове a.exec () запускается цикл обработки событий.

Создаем проект Qt GUI приложения (File>New>Project>Visual C++>Qt>Qt GUI Application>OK>Next>Next>Finish). Получаем шаблон приложения с заготовленным кодом. Запускаем его, открывается окно:


Посмотрим на исходный код в файлах проекта:

Файл main.cpp


В первой строке подключается заголовочный файл QtGuiApplication2.h, который расположен непосредственно в созданном проекте. Во второй строке подключается заголовочный файл QApplication, который расположен в модуле QtWidgets:

В файле main.cpp сначала создается объект класса QApplication, который осуществляет контроль и управление приложением. Для его создания в конструктор этого класса необходимо передать два аргумента. Первый аргумент представляет собой информацию о количестве аргументов в командной строке, с которой происходит обращение к программе, а второй — это указатель на массив символьных строк, содержащих аргументы, по одному в строке. Любая использующая Qt программа с графическим интерфейсом должна создавать только один объект этого класса, и он должен быть создан до использования операций, связанных с пользовательским интерфейсом. После создания элементы управления Qt по умолчанию невидимы, и для их отображения необходимо вызвать метод show().

В последней строке программы приложение запускается вызовом QApplication::exec(). С его запуском приводится в действие цикл обработки событий, определенный в классе QCoreApplication, являющимся базовым для QApplication. Этот цикл передает получаемые от системы события на обработку соответствующим объектам. Он продолжается до тех пор, пока не будет вызван статический метод QCoreApplication::exit(), либо не закроется окно последнего элемента управления. По завершению работы приложения метод QApplication::exec() возвращает значение целого типа, содержащее код, информирующий о его завершении.

Файл QtGuiApplication2.h

В первой строке подключается заголовочный файл QMainWindow, который расположен в модуле QtWidgets.

В файле QtGuiApplication2.h описывается класс QtGuiApplication2, производный от класса QMainWindow, предоставляемого системой Qt. В разделе public объявляется конструктор. В разделе private создается переменная ui, через которую устанавливается пользовательский интерфейс.

Макрос Q_OBJECT должен появляться в закрытом разделе описания класса, который объявляет свои собственные signals и slots (см. Signals и slots. Обработка событий) или использует другие сервисы, предоставляемые системой Qt.

Файл QtGuiApplication2.cpp

В файле QtGuiApplication2.cpp определяется конструктор с передачей параметра parent конструктору базового класса. Функция setupUi берет на себя все действия по созданию этого (this) окна.

Изменяем код в файле main.cpp на следующий:

Запускаем приложение, получаем результат:


Изменяем код в файле main.cpp на следующий:

Запускаем приложение, получаем результат:


Обеспечим агрегацию, чтобы элемент (виджет) label появлялся не отдельно от окна, а входил в него. Для этого изменяем код файлов проекта:

Файл main.cpp

Файл QtGuiApplication2.h

Файл QtGuiApplication2.cpp

Запускаем приложение, получаем результат:


В модели события участвуют три участника:

Ниже приводится описание приложения, при запуске которого появляется окно с кнопкой. При нажатии на кнопку окно закрывается.


Создадим проект приложения под названием Click и изменим код файлов проекта.

Файл main.cpp

Файл Click.h

Обратите внимание, что вместо трех заголовочных файлов (они закомментированы) можно подключать только лишь модуль QtWidgets, в котором эти файлы находятся. При большем количестве подключаемых файлов читаемость программы заметно ухудшается. Кроме того, подключение модулей дает возможность ускорить компиляцию самой программы за счет предварительно откомпилированных заголовочных файлов (Precompiled Headers) в том случае, если ваш компилятор позволяет это делать.

Файл Click.cpp

  1. sender — указатель на объект, отправляющий сигнал;
  2. signal — это сигнал, с которым осуществляется соединение;
  3. receiver — указатель на объект, который имеет слот для обработки сигнала;
  4. slot — слот, который вызывается при получении сигнала.
  5. type — управляет режимом обработки.
  • KeyPress
  • QMoveEvent
  • Disconnecting a signal
  • Timer

Создаем проект Qt GUI приложения (File>New>Project>Visual C++>Qt>Qt GUI Application>OK>Next>Next>Finish). Получаем шаблон приложения с заготовленным кодом. В окне Solution Explore выполняем dblclick на файле QtGuiApplicatin3. ui .


Откроется редактор Qt Desiner. С панели виджетов перетаскиваем на заготовку окна две кнопки Push Button и меняем надписи на кнопках (через dblclick):



Выполняем настройки соединения сигнала clicked() кнопки Quit со слотом close() через окно настроек. Окно открывается, когда отпускаем левую кнопку мышки после движения курсора от кнопки Quit.



Сохраняем результаты роботы в редакторе Qt Desiner (Файл>Сохранить), возвращаемся в редактор VS и запускаем приложение:




Теперь нужно добавить реализацию этого слота (метода slot1 ()) в программном коде:

Изменяем код файлов проекта:

Файл QtGuiApplication3.h

Файл QtGuiApplication2.cpp

Читайте также: