с 2013 года · 300+ статей

Статьи и примеры по Qt, C++ и не только

Технический блог для разработчиков: практические разборы, примеры кода и решения типовых задач — без пейволов и обязательной подписки.

Последние статьи

Различные статьи по Qt и c++

Разделение на единицы трансляции: компиляция и линковка, ODR

Введение В этой статье разберём процесс сборки C/C++ программы системно: что представляет собой единица трансляции, как происходит раздельная компиляция и последующая линковка, и что такое One Definition Rule…

Заметки по языку с и с++

Заголовочные файлы и include guards/pragma once, проблема множественного включения

Введение Мы рассматривали include guard вкратце — в этой статье разберём подробно, почему он необходим, как именно проблема множественного включения проявляется без него, и сравним классический подход (#ifndef/#define/#endif)…

Синтаксис си/с++

Препроцессор: #define, макросы, условная компиляция

Введение Ранее мы использовали #ifndef/#define/#endif для include guard без подробного объяснения — в этой статье разберём препроцессор C/C++ системно: текстовые макросы через #define, условную компиляцию, и важные практические…

Синтаксис си/с++

Умные указатели: unique_ptr, shared_ptr, weak_ptr

Введение Мы разбирали ручное управление динамической памятью через new/delete, систематически разберёт RAII как общую философию — умные указатели представляют практическое, готовое к использованию воплощение RAII конкретно для управления…

Синтаксис си/с++

Move-семантика: rvalue-ссылки, std::move, move-конструкторы

Введение До этой статьи все примеры с копированием объектов (про конструктор копирования концептуально) предполагали полное, «глубокое» копирование данных — move-семантика (C++11) предоставляет альтернативу: эффективную «передачу» внутренних ресурсов объекта…

Arduino

Управление реле и моторами из Qt-интерфейса

Введение Помимо чтения данных датчиков, частая задача — управление исполнительными устройствами: реле (включение/выключение мощных нагрузок), DC-моторы через драйверы типа L298N. В статье разберём прошивку и Qt-интерфейс для управления…

Arduino

Ультразвуковой датчик расстояния (HC-SR04): измерения в реальном времени на графике

Введение HC-SR04 — популярный, недорогой ультразвуковой датчик измерения расстояния, часто используемый в проектах автоматизации, робототехники, парковочных систем. В статье разберём прошивку для работы с этим датчиком и визуализацию…

Arduino

Датчики температуры/влажности (DHT11/22): прошивка и приём данных в Qt

Введение DHT11/DHT22 — одни из самых распространённых, доступных датчиков температуры и влажности для Arduino-проектов. В статье разберём подключение датчика, написание прошивки с использованием готовой библиотеки для чтения показаний,…

Arduino

Прошивка Arduino (sketch): структура setup()/loop(), простой текстовый протокол для Qt

Введение Со стороны Arduino нужна прошивка (sketch), которая слушает последовательный порт, разбирает приходящие от Qt-приложения команды и отправляет обратно данные датчиков. В статье разберём базовую структуру скетча и…

Arduino

Основы QSerialPort: обнаружение портов, открытие соединения, протокол обмена с Arduino

Введение QSerialPort — модуль Qt для работы с последовательными (COM/USB-UART) портами, через которые Arduino по умолчанию общается с компьютером. В статье разберём базовый процесс обнаружения подключённой платы, открытия…

Arduino

Сравнение программ для работы с Arduino: Arduino IDE, PlatformIO, Qt Creator с расширениями

Введение Перед тем как писать прошивку для Arduino, нужно выбрать инструмент разработки. В статье сравним три основных варианта: классическую Arduino IDE, более продвинутый PlatformIO (как расширение для VS…

Заметки по языку с и с++

Смотреть все статьи →
Заметки по языку с и с++

Заголовочные файлы и include guards/pragma once, проблема множественного включения

Введение Мы рассматривали include guard вкратце — в этой статье разберём подробно, почему он необходим, как именно проблема множественного включения проявляется без него, и сравним классический подход (#ifndef/#define/#endif)…

Заметки по языку с и с++

Шаблоны функций: основы обобщённого программирования

Введение До этого момента каждая функция в примерах цикла была написана для конкретного, фиксированного типа параметров — шаблоны позволяют написать одну функцию, работающую с произвольным типом, определяемым компилятором…

Заметки по языку с и с++

Реализация State Machine (конечного автомата) через QStateMachine

Введение Многие части интерфейса и бизнес-логики приложения естественно описываются как конечные автоматы: состояние подключения (отключён/подключается/подключён/ошибка), состояние формы (редактирование/сохранение/сохранено), плеер (воспроизведение/пауза/остановлен). Реализация такой логики через разрозненные булевы флаги и…

Заметки по языку с и с++

Готовый класс для работы с конфигурацией приложения (обертка над QSettings)

Введение QSettings предоставляет кросс-платформенный доступ к настройкам приложения (реестр Windows, .ini-файлы, plist на macOS), но прямое использование QSettings с обращением по строковым ключам по всему коду — источник…

Готовые методы реализаций

Реализация Event Bus / шины событий на сигналах Qt для слабосвязанных модулей

Введение В крупных приложениях с множеством модулей прямая связь между ними через сигналы/слоты (где каждый модуль явно знает о существовании и интерфейсе другого) постепенно создаёт плотный граф зависимостей,…

Различные статьи по Qt и c++

Смотреть все статьи →
Различные статьи по Qt и c++

Разделение на единицы трансляции: компиляция и линковка, ODR

Введение В этой статье разберём процесс сборки C/C++ программы системно: что представляет собой единица трансляции, как происходит раздельная компиляция и последующая линковка, и что такое One Definition Rule…

Заметки по языку с и с++

Концепты (concepts) в C++20: ограничение шаблонных параметров

Введение Одна из главных болей шаблонного программирования в C++ — нечитаемые сообщения об ошибках, когда шаблон используется с неподходящим типом. До C++20 единственным способом ограничить допустимые типы и…

Заметки по языку с и с++

Умные указатели в Qt-коде: когда QSharedPointer, а когда std::shared_ptr

Введение В проектах на Qt разработчик неизбежно сталкивается с выбором: использовать собственные умные указатели Qt (QSharedPointer, QScopedPointer, QPointer) или указатели стандартной библиотеки (std::shared_ptr, std::unique_ptr, std::weak_ptr). Исторически Qt появился…

Заметки по языку с и с++

Потокобезопасные структуры данных в Qt-приложениях: паттерны и ошибки

Введение При переходе от однопоточного кода к многопоточному самая частая ошибка — продолжать использовать обычные контейнеры (QVector, QList, QMap, std::vector) из нескольких потоков без какой-либо синхронизации, считая их…

Cmake

Интеграция Boost в Qt-проект с использованием CMake

Архитектурная Ключевой принцип:никаких глобальных include_directories, только target-based linking. Структура проекта Пример использования Boost внутри Qt Будем использовать: FileService.h FileService.cpp MainWindow.h MainWindow.cpp main.cpp CMakeLists.txt (Qt6 + Boost) Что происходит…

Cmake

Архитектура Qt-приложений + CMake

Цели архитектуры Qt-проекта Хороший Qt-проект: CMake здесь — не просто билд-система, а средство описания архитектуры. Слоистая структура (Layered Architecture) Типовая схема: Каждый слой — отдельная библиотека. Модульность через…

Рубрики