Отлов событий в Qt с помощью фильтров событий

Простой способ отлова событий в Qt с помощью фильтров событий

Исполнение компьютерных программ происходит последовательно, выполняя одну инструкцию за другой. Иногда в программе требуется дождаться некоторого события и отреагировать на него. Ждать этого события в бесконечном цикле расточительно и для обработки таких событий придуманы библиотеки и системные функции, позволяющие вызывать пользовательские функции в тот момент когда происходит событие. В Qt имеется собственная система событий. Очевидный и топорный способ реакции на возникшее событие — переопределение методов базового класса, но этот же способ является и самым громоздким, а также может приводить к нарушению принципов DRY (don’t repeat yourself) т. е. дублированию кода. В этой статье вы познакомитесь со способом вынесения пользовательских обработчиков событий в отдельный класс с возможностью повторного использования.

Читать далее

Краткий справочник по умным указателям С++

Указатели

Умные указатели появились в стандарте С++11 и являются фундаментальной основой для написания безопасного кода с точки зрения утечек памяти в современном С++. Благодаря идиоме RAII (Resource Acquisition Is Initialization – получение ресурса есть инициализация), используемой в умных указателях, они позволяют эффективно работать с указателями на динамически выделенные области памяти. В этой статье вы узнаете об основных моментах при работе с этими полезными типами.

Читать далее

Синхронизация потоков и безопасная работа с общими данными в многопоточной среде на C++ и Qt

Синхронизация потоков и безопасная работа с общими данными в многопоточной среде на C++ и Qt

Представьте, что вы с другом пишете реферат и у вас один учебник на двоих. Вы сели писать реферат, написали несколько страниц, оставили учебник открытым с намерением дописать его позже и ушли по своим делам. В это время ваш друг, который живет с вами в одной комнате, вернулся домой, увидел, что у вас что-то написано на листах, а рядом лежит учебник и решил, что вы закончили свой реферат. Он начинает листать учебник, выкидывая все ваши закладки, находит нужный ему материал и пишет свой реферат. Спустя несколько часов вы возвращаетесь домой, ваш друг уже спит, и вы решаете дописать реферат. Садитесь за письменный стол и «о, ужас!» все ваши закладки сбиты и вы не можете найти то место, где остановились. Неприятная ситуация? А ведь такая же может возникнуть в многопоточной среде, когда одни и те же внешние данные используются несколькими потоками. О том, как с этим жить, я расскажу в этой статье.

Читать далее

О Многопоточности в Qt и как создать поток

Многопоточность в Qt и C++

Многопоточность — свойство платформы выполнять код внутри одного процесса может выполнятся “параллельно” без предписанного порядка во времени. Такой подход полезен когда отделить ресурсоёмкую задачу от остального кода. Например, читать с диска в память большой файл и не «заморозить» графический интерфейс программы. В этой статье поговорим о многопоточности в C++ и о том, как это работает во фреймворке Qt. На примере покажу как запустить в отдельном потоке только один метод объекта, оставив остальные методы «снаружи», обсудим плюсы и минусы такого подхода и как поступить в такой ситуации!

Читать далее

Как работает Git? Одно из частых заблуждений начинающих

Как часто при изучении чего-то нового вы пребывали в состоянии неопределённости, неясности синтаксиса и внутреннего устройства предмета изучения? Мозг буквально “скрипит и закипает” при попытке усвоить и уяснить материал. Однако, со временем эти процессы утихают по мере того, как вы погружаетесь в соответствующий материал. Тем не менее, существует важное заблуждение о работе Git, которое часто встречается среди большинства новичков. Вот что, вероятно, они думают:

Читать далее

Чему я научился за годы программирования: 12 советов разработчикам

Помню тот далекий день, примерно в 2005-2006 году, когда я будучи школьником, методом “проб и ошибок” пытался заставить работать свой первый скрипт. В конце-концов мне это удалось и я ощутил приятную радость и воодушевление. Так начинался мой путь разработчика. Весь этот путь я прошел практически один, у меня не было наставника или учителя, многое приходилось постигать самому, ошибаясь, осознавая это и возвращаясь обратно, пробуя пойти другим путём. Глядя на этот путь, я сформулировал некоторые важные вехи на этом пути и хочу поделиться ими.

Читать далее

Менеджер контекста with в Python

Инструкция with в языке Python часто заводит в тупик тех, кто только начинает своё знакомство с  этим языком. Менеджер контекста, создаваемый инструкцией with, таит в себе невиданную мощь и очень полезный функционал, позволяющий безопасно использовать ресурсы, требуемые получения и обязательного освобождения(завершения). Однако, творческий подход позволяет с удобством использовать этот инструмент и в других областях.

Читать далее

.gitignore для Microchip MPLAB X IDE

Git – является одной из самых распространённых систем управления версиями. Каждый программист ныне просто обязан иметь навыки работы с этой системой и разработчики встраиваемых систем не являются исключением. Разрабатывая свои проекты в различных IDE, последние генерируют множество служебных файлов, которые не должны быть отданы под контроль версий.

Читать далее

Особенности переменных языка Python

Python – скриптовый язык, получивший широкую популярность за счет простоты синтаксиса, скорости написания програм и лёгкой интеграции скриптов. Однако, люди перешедшие на питон с императивных языков, таких как С, например, могут столкнуться с некоторыми неожиданностями, с которыми столкнулся и я.

Читать далее

Взаимодействие с устройствами через ModBus RTU в Qt

Недавно мне на аутсорсе предложили выполнить небольшую работу: разработать ПО с графическим интерфейсом для управления источником питания по протоколу ModBus RTU. Не раздумывая я согласился решить поставленную задачу, однако меня ждал “интересный” сюрприз, вызванный моей же невнимательностью. В этой заметке я приведу пример работы с протоколом ModBus RTU в Qt с подробными коментариями, а заодно расскажу о своей досадной оплошности допущенной при решении этой задачи.

Читать далее