Указатели на функции и их применение
Введение Указатели могут указывать не только на данные, но и на функции — в этой статье разберём указатели на функции, их синтаксис (один из наиболее визуально сложных в…
Технический блог для разработчиков: практические разборы, примеры кода и решения типовых задач — без пейволов и обязательной подписки.
Введение Указатели могут указывать не только на данные, но и на функции — в этой статье разберём указатели на функции, их синтаксис (один из наиболее визуально сложных в…
Введение Ранее мы упоминали «автоматическое» время жизни локальных переменных и динамическую память — в этой статье соберём эти концепции в единую картину, явно разобрав два основных региона памяти,…
Введение До этой статьи все примеры использовали переменные с автоматическим временем жизни, размер и количество которых известны на этапе компиляции — динамическая память позволяет выделять память во время…
Введение Перечисления дают именованные, осмысленные альтернативы «магическим числам» — в этой статье разберём enum в его классическом, С-совместимом виде, и более современный, безопасный enum class C++11, устраняющий ряд…
Введение Ранее мы разобрали struct, где все поля существуют одновременно, занимая суммарный объём памяти — union представляет принципиально иной подход, где все поля совместно используют ОДНУ И ТУ…
Введение После базового синтаксиса (блок 1) переходим к организации данных — struct объединяет несколько связанных значений разных типов в единую сущность, и в этой статье разберём объявление структур,…
Введение Помимо чтения данных датчиков, частая задача — управление исполнительными устройствами: реле (включение/выключение мощных нагрузок), DC-моторы через драйверы типа L298N. В статье разберём прошивку и Qt-интерфейс для управления…
Введение HC-SR04 — популярный, недорогой ультразвуковой датчик измерения расстояния, часто используемый в проектах автоматизации, робототехники, парковочных систем. В статье разберём прошивку для работы с этим датчиком и визуализацию…
Введение DHT11/DHT22 — одни из самых распространённых, доступных датчиков температуры и влажности для Arduino-проектов. В статье разберём подключение датчика, написание прошивки с использованием готовой библиотеки для чтения показаний,…
Введение Со стороны Arduino нужна прошивка (sketch), которая слушает последовательный порт, разбирает приходящие от Qt-приложения команды и отправляет обратно данные датчиков. В статье разберём базовую структуру скетча и…
Введение QSerialPort — модуль Qt для работы с последовательными (COM/USB-UART) портами, через которые Arduino по умолчанию общается с компьютером. В статье разберём базовый процесс обнаружения подключённой платы, открытия…
Введение Перед тем как писать прошивку для Arduino, нужно выбрать инструмент разработки. В статье сравним три основных варианта: классическую Arduino IDE, более продвинутый PlatformIO (как расширение для VS…
Введение Одна из главных болей шаблонного программирования в C++ — нечитаемые сообщения об ошибках, когда шаблон используется с неподходящим типом. До C++20 единственным способом ограничить допустимые типы и…
Введение В проектах на Qt разработчик неизбежно сталкивается с выбором: использовать собственные умные указатели Qt (QSharedPointer, QScopedPointer, QPointer) или указатели стандартной библиотеки (std::shared_ptr, std::unique_ptr, std::weak_ptr). Исторически Qt появился…
Введение При переходе от однопоточного кода к многопоточному самая частая ошибка — продолжать использовать обычные контейнеры (QVector, QList, QMap, std::vector) из нескольких потоков без какой-либо синхронизации, считая их…
Архитектурная Ключевой принцип:никаких глобальных include_directories, только target-based linking. Структура проекта Пример использования Boost внутри Qt Будем использовать: FileService.h FileService.cpp MainWindow.h MainWindow.cpp main.cpp CMakeLists.txt (Qt6 + Boost) Что происходит…
Цели архитектуры Qt-проекта Хороший Qt-проект: CMake здесь — не просто билд-система, а средство описания архитектуры. Слоистая структура (Layered Architecture) Типовая схема: Каждый слой — отдельная библиотека. Модульность через…
Этот шаблон проекта позволяет легко переключаться между различными фреймворками тестирования в C++/Qt: Структура проекта (предполагаемая) Шаблон Как собрать
Введение Многие части интерфейса и бизнес-логики приложения естественно описываются как конечные автоматы: состояние подключения (отключён/подключается/подключён/ошибка), состояние формы (редактирование/сохранение/сохранено), плеер (воспроизведение/пауза/остановлен). Реализация такой логики через разрозненные булевы флаги и…
Введение QSettings предоставляет кросс-платформенный доступ к настройкам приложения (реестр Windows, .ini-файлы, plist на macOS), но прямое использование QSettings с обращением по строковым ключам по всему коду — источник…
Введение В крупных приложениях с множеством модулей прямая связь между ними через сигналы/слоты (где каждый модуль явно знает о существовании и интерфейсе другого) постепенно создаёт плотный граф зависимостей,…
Введение One Definition Rule (ODR, «правило одного определения») — одно из фундаментальных, но часто неочевидных правил C++: любая сущность (функция, переменная, класс, шаблон) должна иметь ровно одно определение…
Введение «Правило пяти» (Rule of Five) — современная версия классического «правила трёх» (Rule of Three) из C++98, расширенная в C++11 семантикой перемещения. Если ваш класс самостоятельно управляет каким-либо…
Введение Одна из главных болей шаблонного программирования в C++ — нечитаемые сообщения об ошибках, когда шаблон используется с неподходящим типом. До C++20 единственным способом ограничить допустимые типы и…