Создаем простое приложение, способное находить объекты на изображении по их цвету…
Устанавливаем дополнительные компоненты OpenCV для получения расширенных возможностей. А также разрабатываем приложение, способное находить фиксированные объекты на изображениях с помощью алгоритмов SURF и FLANN…
Продолжаем знакомство с OpenCV. В этот раз выполним установку этой библиотеки под Windows. Кроме того, создадим тестовое приложение для получения видео-потока от веб-камеры с помощью модуля OpenCV - VideoCapture…
Выполняем базовую установку OpenCV под Linux и создаем пробное приложение для обнаружения лиц на фотографии…
Вводная статья на тему использования Qt Script. Рассматриваем принцип взаимодействия скрипта с Qt-объектами…
Разработаем с помощью XLib небольшое Linux-приложение, которое выводит для всех запущенных окон заголовки, координаты и размеры…
Создадим Qt-приложение, которое умеет отправлять сообщения по электронной почте с помощью QNetworkAccessManager на основе POST-запросов к REST-службе…
Разрабатываем простое приложение, которое позволяет просматривать содержимое реестра Windows, а также добавлять и убирать записи из него с помощью QSettings…
Рассматриваем базовые принципы использования буфера обмена в Qt-приложениях с помощью QClipboard…
Создаем простое приложение с функцией подсветки результатов поиска на основе QSyntaxHighlighter…
Создаем простой Splash Screen для Qt-приложения с помощью QSplashScreen…
Рассматриваем основные приемы создания иконок в системном трее с помощью QSystemTrayIcon в Qt-приложениях…
Реализуем алгоритм шифрования CAST-128 на C++…
Создаем приложение, поддерживающее функцию авто-дополнения текста для QLineEdit с помощью QCompleter…
Приложения часто выигрывают от применения звуковых эффектов. Поговорим о воспроизведении звуков в Qt-программах с помощью QSound и Phonon…
Создадим простое приложение для выбора и увеличения произвольной области изображения с помощью QGraphicsView и QGraphicsScene, реализовав собственный подкласс QGraphicsItem…
Продолжаем тему, начатую в прошлый раз. Создадим полу-прозрачное окно в Qt, а затем придадим ему нестандартную форму с помощью маски…
Чтобы создать узнаваемое приложение, нужно использовать нестандартное оформление (вспомните различные мультимедийные приложения и плееры). В Qt для этого все есть. О стилях мы поговорим в другой раз, а сейчас реализуем простой виджет с самодельной ст
Рассматриваем простой пример использования идиомы Pimpl в C++…
Рассматриваем типичный вариант использования QLibrary для динамической загрузки библиотек в Qt-приложениях…
С помощью gSOAP легко и удобно разрабатывать серверную (да и клиентскую) часть SOAP веб-служб. Однако остается выбор: пойти путем использования механизма CGI на базе веб-сервера или создать автономное Standalone приложение…
Рассматриваем пример использования QNetworkAccessManager для загрузки данных из интернета через GET-запрос…
Предложен простой вариант реализации Прокси-виджета для временной блокировки Ui на основе QStackedWidget…
Рассматриваем простой способ отображения GIF-анимации в Qt с помощью QMovie…
Рассматриваем способ добавления виджетов QWidget в ячейки таблицы QTableWidget на примере кнопок QPushButton…
Решаем задачу чтения больших файлов с диска в Qt с помощью QFile и QThreadPool…
Завершаем черновую реализацию удаленного воспроизведения нажатий клавиш, добавляя поддержку Linux-систем…
Добавляем возможность управления удаленной системой не только мышью, но и с клавиатуры. Пока что для Windows-систем…
Начинаем реализацию Клиента и Сервера. Обеспечиваем трансляцию видео-потока по сети…
Создаем вспомогательную Qt-библиотеку для формирования видео-потока происходящего на экране…
Начинаем новый проект. Создадим упрощенный аналог TeamViewer на Qt…
Пользователь делает меньше ошибок, если его ограничивать. Один из способов достичь этого - использовать Мастер (или Визард). Поэтому не случайно в Qt существует виджет QWizard, о котором мы и поговорим…
Разрабатываем простую архитектуру фильтров изображений в Qt, построенную на паттерне Декоратор…
Хорошим тоном при разработке приложений уже давно стала поддержка нескольких языков. В Qt интернационализация основывается на классе QTranslator. Посмотрим, как использовать его в своих проектах…
Разрабатываем Qt-приложение, которое позволяет загружать изображения в таблицу QTableWidget…
Создаем простое Qt-приложение с возможностью перетаскивания изображений и текста по принципу Drag&Drop…
Рассматриваем решение часто встречающихся задач обработки текста с помощью QRegularExpression в Qt5…
Разработаем простую библиотеку текстовых эффектов для Qt. Особое внимание уделим ООП-проектированию и анализу гибкости архитектуры для подобного проекта…
Диалоговые окна часто раздражают пользователей, если использованы не по назначению. Но иногда они бывают и полезны. Поговорим о создании и использовании модальных и немодальных диалоговых окон в Qt…
Продолжаем работу над нашей сборкой dwm. Сделаем ее более полезной с помощью патчей…
Еще раз о лямбда-функциях в C++. Попробуем разобраться, нужны они или нет…
Делюсь своими впечатлениями от оконного менеджера dwm. Приводится краткий обзор его возможностей и быстрых клавиш. Особое внимание уделено изменению конфигурации и перекомпиляции…
Завершаем работу над простым компилятором дерева синтаксического разбора. В этот раз за основу взят паттерн Посетитель…
Улучшаем функциональность примера, начатого в прошлый раз. И помочь нам вызвался паттерн Абстрактная фабрика…
И снова о применении паттернов в C++. На этот раз у нас в гостях Компоновщик…
Рассматриваем паттерн Состояние на простом примере…
Краткое введение в лямбда-функции в C++11 на примерах…
Указатели на C++ у нас уже были. А теперь посмотрим на то, зачем нужны двойные указатели, и как их правильно использовать…
Статья посвящена умным указателям в C++. Рассмотрены правила использования std::shared_ptr и std::unique_ptr…
Несколько простых примеров для лучшего понимания области видимости и времени жизни переменных в C++…
Все еще неуверенно пользуетесь указателями в C/C++? Пришло время исправить это…
В этот раз рассмотрим способ добавления произвольных виджетов в QListWidget…
Поговорим о создании собственных плагинов с помощью Qt…
Коротко о применении QVariant…
Создаем простой conky-код для отображения текущей погоды…
Добавляем вывод полезной информации для нашего Openbox с помощью conky…
Изучаем базовые средства оформления Openbox. Здесь вы узнаете о настройке тем, курсоров, иконок, прозрачности, обоев рабочего стола и многом другом…
Наведем порядок на наших виртуальных рабочих столах Openbox - закрепим приложения на своих местах…
Займемся настройкой быстрых клавиш и других полезных возможностей, которые существенно упростят работу с Openbox…
Рассмотрим основные этапы первичной настройки оконного менеджера Openbox…
В этот раз мы рассмотрим теоретические основы одной из наиболее интересных техник создания ИИИ - искусственные нейронные сети…
Продолжаем решать побочные задачи. Добавим возможность изменения размеров уровня, остановки/запуска и управления скоростью симуляции, а также отображение отладочной информации о Ботах…
Займемся более приземленными вещами. Добавим в тестовое приложение функциональность редактора уровней…
Цель - попытаться убежать от атакующего Бота. Разберемся с тем, как подойти к решению подобной проблемы…
Цель - найти маршрут для перемещения Бота из точки A в точку B. Давайте реализуем ИИИ, которому это по силам…
В этот раз мы воспользуемся движком, который у нас получился в прошлый раз, и добавим в тестовое приложение несколько простых алгоритмов ИИИ…
Чтобы что-то лучше понять, проще всего изучить это на примерах. В качестве основы для наших экспериментов с игровым искусственным интеллектом я подготовил простой движок, с которым мы будем работать…
Начинаем новую серию статей, посвященных игровому искусственному интеллекту. Здесь мы коснемся основ этой интересной темы…
Завершаем работу над реализацией тетриса. Речь пойдет о Представлении и Контроллере…
Чтобы тетрис стал именно тетрисом, одной механики мало. Требуется контроль соблюдение правил. Этим мы и займемся…
В этот раз мы посмотрим на динамическую составляющую модели тетриса, которая обеспечивает соблюдение известной нам механики игры…
Продолжаем нашу работу над тетрисом на C++. Продумаем алгоритм обнаружения столкновений, который сильно упростит нам жизнь в дальнейшем…
Разберемся со статическими аспектами игры тетрис. Для этого рассмотрим особенности реализации его Модели…
Давайте немного отдохнем. Займемся разработкой тетриса на C++…
Данные многих приложений удобно отображать в виде списков. В Qt для этой цели предусмотрен виджет QListWidget, примеры использования которого мы и рассмотрим…
Использование таймеров в Qt является тривиальной, но часто необходимой задачей. Рассмотрим типичные примеры использования QTimer…
Использование паттерна Singleton представляет собой компромисс между удобством использования и порождением глобальных зависимостей в коде. Узнайте подробнее о его плюсах и минусах…
Программный код намного проще сопровождать, если он хорошо организован. Принцип единой ответственности поможет вам для достижения этой цели…
В Qt имеются удобные средства для сохранения данных в файл. Поговорим о наиболее важных из них: QTextStream и QDataStream…
В Qt предусмотрено множество способов проверки вводимых пользователем данных. Один из таких способов - применение QValidator. Рассмотрим пример его использования…
Использование явного приведения типов в C++ нельзя назвать хорошей практикой. Но знать о существовании static_cast, reninterpret_cast, dynamic_cast и const_cast все равно нужно…
Полиморфизм в C++ является главным методом создания гибкого и простого в сопровождении кода. Давайте рассмотрим пример его использования, основанный на ООП…
Односвязный список - одна из самым популярных абстрактных структур данных. Он является основой для очередей и стеков, поэтому если вы серьезно занимаетесь программированием, то обязаны понимать особенности его реализации…
Действия над комплексными числами крайне важны при решении многих математических задач. Освойте приемы работы с комплексными числами в C++, о которых вы могли не знать…
Регулярные выражения в Qt имеют множество вариантов использования. Узнайте о наиболее важных из них…
Ваше Qt-приложение использует изображения, звуковые эффекты или другие ресурсы? Обезопасьте себя от неосторожных действий пользователя, узнав как прятать эти внешние зависимости внутри бинарных файлов…
Ни одна крупная информационная система не обходится без использования баз данных. О том, как применять их в своих Qt-приложениях вы и узнаете, прочитав эту заметку…
При разработке приложений у вас может возникнуть задача запуска стронней программы. Из этой заметки вы узнаете о наиболее популярных способах использования этой возможности средствами Qt…
Устали от лишних условных конструкций в коде? Хотите узнать о новом для себя приеме ООП? Тогда эта заметка для вас…
Для создания гибкого кода подходят не только приемы ООП, но и низкоуровневые операции с битами. Об одном из таких приемов вы и узнаете…
Контекстные меню часто позволяют экономить место на форме приложения, поэтому не лишне уметь ими пользоваться. Эта заметка является кратким введением в контекстные меню Qt…
Компьютер без операционной системы и приложений - просто груда железа. О том, какие приложения позволяют решать повседневные задачи, вы узнаете в этой заметке…
Пользоваться приложениями с графическим интерфейсом удобно. Но иногда для выполнения большого объема работы оптимальным решением оказывается использование консольных утилит. Одной из таких утилит является ImageMagick. В этой заметке мы поговорим о то
Потребовалось сохранить настройки Qt-приложения, но не знаете как? Есть несколько способов. Рассмотрим один из самых удобных…
Решили организовать возможность импорта/экспорта данных для вашего Qt-приложения? В этой заметке мы познакомимся с одним из способов реализации этих функций…
Хотите узнать новые для себя приемы объектно-ориентированного проектирования? Или решили разобраться с формированием XML-документов в Qt? Тогда и в том, и в другом случае эта заметка может оказаться для вас полезной…
В этой заметке я расскажу об основных назначениях и способах применения базовых структур данных, которые поддерживаются практически во всех языках программирования. Поэтому если вы до сих пор применяете в своих программах только массивы и векторы, то
В большинстве современных языков программирования реализована поддержка мощного механизма для обмена сообщениями об ошибках. Речь идет об исключениях. Их возможности не безграничны, но они способны серьезно упростить структуру кода обработки ошибок.
Программирование было бы намного легче, если бы не обработка ошибок. Но реальная среда исполнения ваших программ весьма сурова. Сетевые соединения обрываются, оборудование дает сбои, а пользователи проявляют чудеса изобретательности и так и норовят ч
Я думаю, что вы уже неоднократно слышали про гибкие методики разработки программного обеспечения. Одним из важных элементов этих методик является создание тестов до написания самого исходного кода. В этой заметке я расскажу о некоторых плюсах и минус
Достаточно часто добиться повторного использования кода можно с помощью универсальных алгоритмов, одним из входных параметров которых является функция. В этой заметке вы узнаете о том, какие преимущества несет в себе этот прием, а также какими спосо
Эта заметка является кратким введением в концепцию модель-представление в Qt. Мы создадим простое приложение, которое позволит добавлять и удалять данные в табличную модель. При этом все изменения будут мгновенно отображены в соответствующем представ
Эта заметка посвящена сравнению двух реализаций одного и того же алгоритма решения головоломки Судоку на языках программирования Python и С++. В ней мы попытаемся определить сильные и слабые стороны каждой версии…
Если вы хотите добиться высокой эффективности при работе на компьютере, то начинать нужно с главного. А один из самых главных элементов взаимодействия с компьютером - это работа с файловой системой. В этой заметке я даю десять советов по использовани
В Qt, как и во многих других SDK, предусмотрена очень удобная и весьма функциональная система компоновки виджетов с помощью лейаутов. Однако бывают случаи, когда возникает необходимость расположить один виджет над другим в обход системы компоновки. Н
Когда-то у меня самого возникал этот вопрос, поэтому я решил дать ответ на него в виде этой заметки. Если вы только начинаете изучать C++ или не совсем уверены в том, что до конца понимаете назначение ключевого слова const, то этот материал будет вам
Вам потребовалось отобразить индикатор прогресса в табличном представлении вашего Qt-приложения? О том, как это сделать, вы узнаете прочитав эту заметку…
Эта заметка представляет собой краткое введение в принципы создания веб-служб на C++ с помощью gSOAP. Сначала мы разработаем свой простой протокол веб-службы, а затем реализуем сервер и клиент на С++, которые смогут обмениваться сообщениями по сети ч
Как часто вы повторяетесь? Отнимает ли это у вас время? А можете ли вы что-нибудь с этим сделать? В этой заметке мы поговорим о принципе DRY в программировании и не только…
В этой заметке мы посмотрим на то, как с помощью QtConcurrent можно легко увеличить скорость алгоритма обработки изображения в четыре раза…
В этой заметке я расскажу об одном оконном менеджере для Linux, которым пользуюсь сам уже на протяжении 4 лет. Он называется Openbox. Если вы находитесь в поиске идеальной графической оболочки для своего дистрибутива, то вполне возможно, что этот мат
QtSDK предоставляет нам множество удобных инструментов для разработки многопоточного кода. А модель сигналов и слотов многократно упрощает их использование и в большинстве случаев берет на себя вопросы синхронизации. В этой заметке мы рассмотрим неск
Паттерн Наблюдатель позволяет легко организовать связь между объектами приложения по принципу функций обратного вызова. В этой заметке мы рассмотрим один способ реализации универсального подмешиваемого mixin-класса для объекта-Источника средствами C+
Паттерны объектно-ориентированного проектирования предлагают гибкие решения для многих задач. Одним из таких паттернов является Model-View-Controller, то есть Модель-Представление-Контроллер. В этой заметке мы создадим с его помощью игру Сапер…
Вам нравятся сигналы и слоты в Qt? А хотели бы вы пользоваться ими для связи ваших приложений по сети? Для этого существует библиотека LibQxt. О ней и пойдет речь в этой заметке…
Рано или поздно любой разработчик программного обеспечения приходит к необходимости осмысленного продумывания и организация структуры своих проектов. В этой заметке я хочу рассказать о структуре, которую применяю сам при создании Qt-приложений на язы