const и volatile: семантика, const-корректность
Введение Завершаем второй блок цикла спецификаторами const и volatile — const уже неоднократно встречался в предыдущих статьях цикла про константные ссылки) без подробного разбора, и в этой статье…
Технический блог для разработчиков: практические разборы, примеры кода и решения типовых задач — без пейволов и обязательной подписки.
Введение Завершаем второй блок цикла спецификаторами const и volatile — const уже неоднократно встречался в предыдущих статьях цикла про константные ссылки) без подробного разбора, и в этой статье…
Введение В этой статье разберём процесс сборки C/C++ программы системно: что представляет собой единица трансляции, как происходит раздельная компиляция и последующая линковка, и что такое One Definition Rule…
Введение Мы рассматривали include guard вкратце — в этой статье разберём подробно, почему он необходим, как именно проблема множественного включения проявляется без него, и сравним классический подход (#ifndef/#define/#endif)…
Введение Ранее мы использовали #ifndef/#define/#endif для include guard без подробного объяснения — в этой статье разберём препроцессор C/C++ системно: текстовые макросы через #define, условную компиляцию, и важные практические…
Введение Мы разбирали ручное управление динамической памятью через new/delete, систематически разберёт RAII как общую философию — умные указатели представляют практическое, готовое к использованию воплощение RAII конкретно для управления…
Введение До этой статьи все примеры с копированием объектов (про конструктор копирования концептуально) предполагали полное, «глубокое» копирование данных — move-семантика (C++11) предоставляет альтернативу: эффективную «передачу» внутренних ресурсов объекта…
Введение Помимо чтения данных датчиков, частая задача — управление исполнительными устройствами: реле (включение/выключение мощных нагрузок), DC-моторы через драйверы типа L298N. В статье разберём прошивку и Qt-интерфейс для управления…
Введение HC-SR04 — популярный, недорогой ультразвуковой датчик измерения расстояния, часто используемый в проектах автоматизации, робототехники, парковочных систем. В статье разберём прошивку для работы с этим датчиком и визуализацию…
Введение DHT11/DHT22 — одни из самых распространённых, доступных датчиков температуры и влажности для Arduino-проектов. В статье разберём подключение датчика, написание прошивки с использованием готовой библиотеки для чтения показаний,…
Введение Со стороны Arduino нужна прошивка (sketch), которая слушает последовательный порт, разбирает приходящие от Qt-приложения команды и отправляет обратно данные датчиков. В статье разберём базовую структуру скетча и…
Введение QSerialPort — модуль Qt для работы с последовательными (COM/USB-UART) портами, через которые Arduino по умолчанию общается с компьютером. В статье разберём базовый процесс обнаружения подключённой платы, открытия…
Введение Перед тем как писать прошивку для Arduino, нужно выбрать инструмент разработки. В статье сравним три основных варианта: классическую Arduino IDE, более продвинутый PlatformIO (как расширение для VS…
Введение Завершаем второй блок цикла спецификаторами const и volatile — const уже неоднократно встречался в предыдущих статьях цикла про константные ссылки) без подробного разбора, и в этой статье…
Введение Мы рассматривали include guard вкратце — в этой статье разберём подробно, почему он необходим, как именно проблема множественного включения проявляется без него, и сравним классический подход (#ifndef/#define/#endif)…
Введение До этого момента каждая функция в примерах цикла была написана для конкретного, фиксированного типа параметров — шаблоны позволяют написать одну функцию, работающую с произвольным типом, определяемым компилятором…
Введение Многие части интерфейса и бизнес-логики приложения естественно описываются как конечные автоматы: состояние подключения (отключён/подключается/подключён/ошибка), состояние формы (редактирование/сохранение/сохранено), плеер (воспроизведение/пауза/остановлен). Реализация такой логики через разрозненные булевы флаги и…
Введение QSettings предоставляет кросс-платформенный доступ к настройкам приложения (реестр Windows, .ini-файлы, plist на macOS), но прямое использование QSettings с обращением по строковым ключам по всему коду — источник…
Введение В крупных приложениях с множеством модулей прямая связь между ними через сигналы/слоты (где каждый модуль явно знает о существовании и интерфейсе другого) постепенно создаёт плотный граф зависимостей,…
Введение В этой статье разберём процесс сборки C/C++ программы системно: что представляет собой единица трансляции, как происходит раздельная компиляция и последующая линковка, и что такое One Definition Rule…
Введение Одна из главных болей шаблонного программирования в 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) Типовая схема: Каждый слой — отдельная библиотека. Модульность через…