Выбор элемента по порядку Если нужен один элемент на позиции k в отсортированной последовательности, полная сортировка делает лишнюю работу. std::nth_element переставляет диапазон так, чтобы элемент на позиции nth…
Совместное управление остановкой std::jthread появился в C++20 и упрощает управление временем жизни потока: его деструктор запрашивает остановку и присоединяет поток. Поток должен сам проверять запрос и завершать работу…
Когда обычный QModelIndex недостаточен QModelIndex обычно используют кратковременно: получить данные, обработать действие пользователя и завершить работу. После вставки, удаления или перестановки строк старый индекс может больше не указывать…
Модель только для чтения из SQL-запроса QSqlQueryModel связывает результат произвольного SQL-запроса с представлением Qt. Это удобно для отчётов и сложных выборок, когда редактирование напрямую через таблицу не требуется.…
Перенос элементов по условию без потери порядка std::stable_partition переставляет диапазон так, чтобы элементы, удовлетворяющие предикату, оказались перед остальными. При этом относительный порядок внутри обеих групп сохраняется. Итератор middle…
Когда Git LFS полезен Большие бинарные файлы — тестовые видео, наборы изображений или модели — быстро увеличивают размер Git-репозитория. Git LFS хранит в Git небольшие текстовые указатели, а…
Зачем выносить работу из интерфейсного потока Если слот кнопки выполняет долгую операцию прямо в GUI-потоке, окно перестаёт перерисовываться и не реагирует на действия пользователя. Для независимой вычислительной задачи…
Переход с Qt5 на Qt6 — это не просто смена номера версии в файле сборки. Qt6 принёс изменения в систему сборки (переход на CMake как основной инструмент), переработку…
Qt6 — первое крупное обновление основной версии фреймворка за много лет. В отличие от перехода Qt4 → Qt5, который был довольно болезненным, Qt6 спроектирован так, чтобы упростить поддержку…
Qt Quick 3D — это декларативный модуль для построения 3D-сцен на QML, появившийся ещё в Qt 5.15 в техническом превью и получивший полноценную поддержку в Qt6. В отличие…
При миграции с Qt5 на Qt6 значительная часть работы — это механическая замена устаревших классов и методов. Ниже приведена таблица наиболее частых соответствий, а также примеры кода «было/стало»…
Qt позволяет писать кросс-платформенные мобильные приложения на C++/QML с единой базой кода для Android и iOS. В этой статье рассмотрим настройку окружения для сборки под Android и создадим…
Модель только для чтения из SQL-запроса QSqlQueryModel связывает результат произвольного SQL-запроса с представлением Qt. Это удобно для отчётов и сложных выборок, когда редактирование напрямую через таблицу не требуется.…
Введение Модуль Qt SQL предоставляет единый высокоуровневый интерфейс для работы с разными СУБД — SQLite, MySQL, PostgreSQL и другими — через систему драйверов. Это позволяет писать код, который…
Введение Формирование SQL-запроса через конкатенацию строк с пользовательским вводом — прямой путь к SQL-инъекции, одной из самых серьёзных и распространённых уязвимостей веб- и десктоп-приложений, работающих с базами данных.…
Введение Для типичной задачи отображения и редактирования таблицы базы данных в табличном виджете Qt предоставляет QSqlTableModel, который автоматически генерирует SQL-запросы для чтения, обновления, вставки и удаления строк, избавляя…
Введение По мере развития приложения схема базы данных меняется — добавляются таблицы, столбцы, индексы. Если изменения схемы применяются вручную и бесконтрольно, разные установки приложения у разных пользователей (или…
Введение Транзакция — группа операций с базой данных, которая должна быть выполнена целиком (commit) или не выполнена вовсе (rollback), без промежуточных, частично применённых состояний. Это критично для операций,…
Введение Boot2Qt — коммерческое решение от Qt Company для встраиваемой (embedded) разработки: готовый, оптимизированный embedded Linux образ с предустановленным Qt, инструменты для удалённого развёртывания и отладки прямо из…
Введение Не каждой команде подходит коммерческий Boot2Qt — для полностью самостоятельного контроля над embedded Linux образом часто используется Yocto Project, более гибкий, но и значительно более сложный путь…
Введение Embedded-устройства часто работают на значительно более слабом железе, чем десктоп или даже современный смартфон — медленный процессор без аппаратного ускорения графики или с ограниченной GPU, мало оперативной…
Введение Большинство embedded-устройств не запускают полноценную систему рабочих столов с X11 или Wayland — Qt-приложение часто является единственным графическим приложением на устройстве, рисующим прямо в фреймбуфер или напрямую…
Введение Многие embedded-устройства используют сенсорные экраны как основной способ взаимодействия с пользователем, и в отсутствие полноценной оконной системы (статья 243) обработка касаний требует отдельной настройки на уровне Qt…
Введение Embedded-устройства, развёрнутые «в поле» (у конечных пользователей или на производственных площадках), редко имеют физический доступ для ручного обновления — необходим механизм обновления «по воздуху» (Over-The-Air, OTA), позволяющий…