QFuture и QtConcurrent: асинхронные вычисления без ручного управления потоками
Введение Модуль QtConcurrent предоставляет высокоуровневый API для параллельных вычислений, скрывающий детали создания и синхронизации потоков. Вместо явного создания QThread или QRunnable достаточно вызвать функцию вроде QtConcurrent::run(), передав ей…
Поворотный энкодер и кнопочные/переключательные модули (key switch, tilt switch, металлосенсор)
Введение Поворотный энкодер (rotary encoder) и несколько разных по принципу действия переключателей (модуль переключателя ключей, переключатель наклона, металлический сенсорный модуль, модуль «для охоты»/»hit») объединены в одну статью как…
Потокобезопасные структуры данных в Qt-приложениях: паттерны и ошибки
Введение При переходе от однопоточного кода к многопоточному самая частая ошибка — продолжать использовать обычные контейнеры (QVector, QList, QMap, std::vector) из нескольких потоков без какой-либо синхронизации, считая их…
Подписывание и верификация плагинов для безопасности
Введение Система плагинов, загружающая произвольный код из файлов на диске, по своей природе расширяет поверхность атаки приложения — если злоумышленник может подменить файл легитимного плагина на вредоносный (через…
Гироскоп/акселерометр (MPU6050) через I2C: измерение наклона и движения
Введение Гироскопический модуль из набора (обычно на базе чипа MPU6050 или аналогичного) — комбинированный датчик, объединяющий трёхосевой акселерометр (измерение ускорения, включая гравитацию — что позволяет определить наклон) и…
Правило пяти (Rule of Five) в C++: конструкторы копирования/перемещения на практике
Введение «Правило пяти» (Rule of Five) — современная версия классического «правила трёх» (Rule of Three) из C++98, расширенная в C++11 семантикой перемещения. Если ваш класс самостоятельно управляет каким-либо…
Объединения (union) и битовые поля
Введение Ранее мы разобрали struct, где все поля существуют одновременно, занимая суммарный объём памяти — union представляет принципиально иной подход, где все поля совместно используют ОДНУ И ТУ…
Песочница для плагинов: изоляция и обработка крашей сторонних плагинов
Введение Плагин, написанный сторонним разработчиком и загруженный в адресное пространство основного процесса через QPluginLoader, технически имеет полный доступ ко всей памяти процесса — баг или преднамеренно вредоносный код…
Автоматический деплой: публикация релизов, обновление каналов распространения
Введение Упаковку готового релиза — финальный шаг CD (Continuous Deployment/Delivery) — автоматическая публикация этого упакованного релиза в местах, где его получают конечные пользователи: GitHub Releases, магазины приложений, или…