https://github.com/palmanov/wordcounter
Test task for 2GIS
https://github.com/palmanov/wordcounter
cpp qml qt
Last synced: 8 months ago
JSON representation
Test task for 2GIS
- Host: GitHub
- URL: https://github.com/palmanov/wordcounter
- Owner: palmanov
- Created: 2024-06-12T18:58:43.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-06-14T09:21:03.000Z (over 1 year ago)
- Last Synced: 2024-12-30T03:45:47.872Z (10 months ago)
- Topics: cpp, qml, qt
- Language: C++
- Homepage:
- Size: 150 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# WordCounter
Демонстрация работы
[Youtube](https://youtu.be/IBNn9LtZ6LU)## Архитектура
- `FileProcessorThread` - класс, наследующий QThread, для чтения и обработки файла в фоновом потоке;
- `FileProcessor` - класс, управляющий и предоставляющий интерфейс для взаимодействия с QML;
- `Main.qml` - основной файл QML, описывающий пользовательский интерфейс;
- `WordHistogram.qml` - файл QML, описывающий элемент интерфейса "Гистограмма".## Логика работы программы
1. Получение от диалогового окна пути до текстового файла
2. Отправка пути до файла до `FileProcessorThread` для последующей обработки
3. По нажатию на кнопку "Старт", вызывается метод `startProcessing()` с последующим запуском потока чтения и обработки файла.
4. Файл считывается построчно. Сплитится строка по регулярному выражения `\W+`. Инкрементируются счетчики для слов, хранящихся в `QMap`. Поддерживается вектор, состоящий из топ-15 слов.
5. Вектор из топ-15 слов отправляется на отрисовку.Для реализации возможности приостановки и остановки потока, наследовался от `QThread`, перегрузил виртуальный метод `run()` и воспользовался `QWaitCondition`.
P.S. Обычно так не делаю. Использую `QObject::moveToThread()`.
## Скриншоты
macOS

Android
