Как стать автором
Обновить
21
0
Владимир Литвиненко @coffeesmoke

Пользователь

Отправить сообщение

Qt Framework: потоки, иерархический конечный автомат, работа с USB-устройствами = QThread + QStateMaсhine + libUSB

Время на прочтение68 мин
Количество просмотров25K
Почти все разработчики программного обеспечения рано или поздно подходят к этапу, когда необходимо применить технологию распределения задач по отдельным потокам. Сейчас трудно представить разработку без применения того или иного фреймворка (framework).
Множество из них содержат необходимые инструменты для создания многопоточных приложений. Не исключение и Qt Framework.

Поговорим о методах Qt многопоточной разработки подробнее.

Сообщество разработчиков ПО на Qt Framework огромно. Люди охотно делятся навыками и приёмами создания многопоточных приложений. Существует множество замечательных книг и статей по вопросам изящного и не очень решения задачи работы с несколькими потоками.
Казалось бы, всё уже решено. Что ещё можно добавить?
Попробую описать работу потока на основе функционирования конечного автомата. Признаюсь, не находил материалы с подобным решением в сети.
Если статья поможет вам с идеей, что, по моему мнению, гораздо ценнее написанного кода, буду очень рад.

Выражаю отдельную благодарность А. Н. Боровскому за книгу «Qt4.7+.Практическое программирование на C++».
Рекомендую к обязательному прочтению!
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии28

Болт с обратной резьбой для .slip-ого Embarcadero RAD Studuo XE

Время на прочтение2 мин
Количество просмотров18K
Совет, как не превысить число допустимых лицензий на одну зарегистрированную копию Embarcsdero RAD Studio XE. Возможно, будет полезно к прочтению системным администраторам и руководителям проектов, разрабатываемых на Embarcadero RAD Studio XE.
Проверено на Delphi XE3.
Вам интересно
Всего голосов 13: ↑10 и ↓3+7
Комментарии2

Простые вещи. Файл настроек и небольшой прицеп утилит

Время на прочтение15 мин
Количество просмотров855
Этот пост, для тех, кто пишет на C[/C++]. Остальные могут не читать.

Как всегда, работая над проектами хочу поделится очередной технологией. Наверное, громко сказано. Скорее, простым решением в области создания и работы с файлом настройки программ.

В мире много готовых решений. От XML-формата до… Одним словом, много. Данная статья не претендует на что-то сверхновое, не побуждает к дискуссиям о стиле, методах и реализации.

Я, просто, делюсь быстрым решением, как читать параметры и значения, разделённые знаками «равно» из файла настроек формата, похожего на, скажем, php.ini

Перейдём, непосредственно, к решению.
Всего голосов 23: ↑12 и ↓11+1
Комментарии20

Qt + OpenCV. Новое устройство GigE интерфейса доступа к сетевым видеокамерам как CvCapture

Время на прочтение8 мин
Количество просмотров6.7K
Как говорил Генрих VIII очередной жене, — «Я вас долго не задержу...»
Пост — небольшое расширение предыдущей статьи «Qt + OpenCV. Runtime и Widget для CvCapture (устройства видеозахвата).»
Если вас, уважаемый читатель, угораздило приобрести видеокамеру, поддержка которой не обеспечена библиотекой OpenCV, а методы работы оной с изображениями ой как нужны, не следует расстраиваться.
Сперва изучим, что нам преподнесли, или что сами, несведующие, купили.
  1. Интерфейс GigE поддерживается SDK, лежащей в свободном доступе или поставленной совместно с товаром. Первый плюс!
  2. Документация более-менее осмыслена. Снова повезло!
  3. Примеры есть! Надо же… Плюс!

Итак, я стал «счастливчиком» по плюсикам этого списка, заполучив камеру Smartek Giganetix GC1921M
Методы SDK работают, но как-то так… Код частично закрыт. Уровень программиста стал понятен из фрагмента кода
...
if (m_selectedDevice->IsConnected()){
			m_disconnectAct->setEnabled(true);
			m_fwUpdateAct->setEnabled(true);
}
...

Если у вас возник вопрос, — «А что тут такого?», — я не смогу отправить вас на машине времени в советский вуз, где за это с вас снимут балл на экзамене. :)

Да, и ладно. Нам-то нужно, всего лишь, подключиться, принять поток и отключиться. Благо, примеры — на месте.
Теперь -- о главном.
Всего голосов 14: ↑9 и ↓5+4
Комментарии16

Qt + OpenCV. Runtime и Widget для CvCapture (устройства видеозахвата)

Время на прочтение14 мин
Количество просмотров22K

Введение.


Анализируя замечания предыдущего поста (Qt Designer & Runtime Qt библиотеки на службе OpenCV...), пришлось более детально проработать устройство видеозахвата библиотеки OpenCV и методы разделения библиотек runtime и виджетов.
Работа с Qt Designer удобна (я — лентяй), поэтому и возник компонент проектирования интерфейса для CvCapture. После начала работы подтянулось и «научное » тому объяснение — удобно применить нечто похожее, скажем, при проектировании интерфейса свойств или параметров приложения, использующего устройство видеозахвата.
Пока идёт скачивание архива проекта, читайте далее.

Благодарности.


Спасибо всем, кто оставил свои замечания по предыдущему посту.

Библиотека времени выполнения.


Итак, библиотека OpenCV установлена, примеры кода просмотрены. Самое время «прикрутить» устройство видеозахвата к Qt. Да не просто так, а чтобы и изображения получать, меняя устройства динамически. Да, чтобы помнило все пути к изображению, видео. Да, чтобы и номера камер переключало. Да, чтобы и… пост покороче получился.
Библиотека.

Чего проще! Наследуем новый класс библиотеки от QObject, прячем ненужные разработчику поля и методы в приватный класс как элемент коллекции QScopedPointer, монтируем сигналы оповещения и слоты-обработчики.
Читать дальше →
Всего голосов 33: ↑31 и ↓2+29
Комментарии10

Qt Designer & Runtime Qt библиотеки на службе OpenCV разработчика, или тащим IplImage на QLabel

Время на прочтение15 мин
Количество просмотров14K

Введение


Как и большинства разработчиков Qt, использующих библиотеку OpenCV, меня заинтересовала тема представления изображения, полученного из web-камеры, как компонент визуального проектирования интерфейса для Qt Designer.
Перерыв кучу информации в сети, заметил, что большинство статей повторяют друг друга, и найти «изюминку» слишком трудно. Думаю, мой обыт создания визуальной компоненты по представлению изобравжения библиотеки OpenCV для Qt Designer будет полезен. К тому же, поделюсь информацией, как разделить библиотеки времени проектирования дизайна и времени выполнения кода. Подобный подход весьма удачно зарекомендовал себя в RAD Delphi для операционных систем семейства Windows.

Замечания

  • Автор coffeesmoke не «разжёвывает» простые истины, методы и тонкости. Код понятен. Функции не превышают 20 строк.
  • Проект и пример использования реализован на Qt Creator для ОС Linux. Разработчики Windows-приложений должны установить настройки в файлох .pro соответственно своей ОС
  • Автор не пускается в дискуссии типа «а так было бы лучше». Нашли оптимальное решение, реализуйте.
  • Автор не отвечает на вопросы настроек Qt Creator и/или Qt Designer. Поисковые системы вам в помощь!
  • Пост несёт ознакомительный характер и служит обозначению направления движения ваших мыслей. Куда они пойдут, вам виднее.


Проектирование и выполнение


Выполнение

Оставим ненадолго библиотеку OpenCV работы с изображениями. Наша задача — универсальная runtime-библиотека (библиотека времени исполнения кода).
Возможно, то, что я сейчас покажу используется повсеместно. Однако, не встретил я на просторах сети по тематике построения плагинов под Qt Designer подобного подхода.
Задача состоит в том, чтобы не «тащить» библиотеку плагина Qt Designera в проект, а обойтись библиотекой времени исполнения. Очевидно, что runtime-библиотеку можно «обрамить» виджетом представления компонента на палитре Qt Dessigner
Читать дальше →
Всего голосов 22: ↑18 и ↓4+14
Комментарии13

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Зарегистрирован
Активность