Показаны сообщения с ярлыком Qt. Показать все сообщения
Показаны сообщения с ярлыком Qt. Показать все сообщения

пятница, 20 марта 2015 г.

Cross-platform GUI for an OceanOptics spectrometers

И  так, не прошло и года, а прошло целых 4 года...
Однако, есть отличный повод для записи - у меня наконец-то дошли руки, чтобы сделать по крайней мере одну полезную конфигурацию для khameleon-а. Конфигурация предназначена для работы со спектрометрами OceanOptics, поддерживаемыми свободным драйвером SeaBreeze.

Среди основных функций:
  • График спектра с измерениями и экспортом 
  • Установка времени экспозиции
  • "Динамическая экспозиция"
  • Корректировка шумового фона по показаниям с "тёмных пикселей" и/или по "сырому" измерению.
  • Усреднение получаемых спектров
  • Потоковая запись спектров в отдельные бинарные файлы
Найти всё это можно здесь. По ссылке есть исходники и готовые сборки для Windows 7 и Linux (обе для 32-х битных систем). Я надеюсь, что эта сборка может оказаться полезной для кого-либо, кроме меня, и буду благодарен за любую обратную связь :).

вторник, 14 октября 2008 г.

Khameleon Modular System: О взаимодействии модулей со средой

И так, имеется заранее определённый интерфейс взаимодействия модулей, реализованный через qplugin. Как выглядит загрузка модуля через QPluginLoader — вначале необходимо получить список файлов модулей, которые хотим загрузить, затем создаём pluginloader и скармливаем ему в цикле эти файлы. Далее pluginloader.instance() возвращает нам указатель на QObject. И теперь осталось лишь получить объект с описанным нами интерфейсом с помощью qobject_cast(plugin). Однако тут есть тонкое место, интерфейсов у нас несколько, и различаться они могут как по типам, так и по версиям.
Оказывается в Qt есть механизм QMetaObject, с помощью которого сам Qt получает инфу о сигналах, слотах и ещё кое-каких параметрах объекта. Но самое вкусное для нас лежит рядом, в QMetaProperty. С помощью макроса Q_PROPERTY можно добавить к объекту свои «свойства», доступ к которым будет открыт на стадии, когда модуль представляет из себя лишь абстрактный QObject. И именно в этот момент можно будет узнать что у нас за модуль в руках, и какой именно интерфейс для него следует использовать. Т.о. фактически интерфейс разбивается на две части: некий мета-интерфейс, т.е. По сути список properties который фиксирован раз и навсегда, и рабочие методы объекта модуля. Интересно, а работать это будет...
P.S. представленная информация, по сути, вольный перевод разных частей Qt Assistant, для уточнения деталей следует обращаться непосредственно к первоисточнику.

Khameleon Modular System: О взаимодействии модулей

Модули взаимодействуют посредством сигналов и контейнеров QVariant для обмена данными.
Скажем, есть модуль получения данных с какого-либо девайса. Как только получена порция данных, модуль пускает сигнал, который связан со слотами модулей, которым эти данные необходимы. «Среда» отвечает за правильное связывание сигналов со слотами. Передача данных от модуля к модулю происходит посредством структур, обёрнутых в QVariant. Формат структуры заранее не определён, но описан в документации к модулю.
После того как отработали модули работы с данными каждый также пускает сигнал и результат их работы передаётся следующим и т.д.
У каждого модуля есть некоторые внутренние параметры, определяющие его работу. Необходимо предусмотреть чтение этих параметров, а так же их изменение другими модулями в процессе работы. Скорее всего это будет нечто вроде QStringList, где последнее слово в строке определяет значение параметра. Должны быть реализованы функции чтения всего списка параметров, чтение значения отдельного параметра (по строке с названием параметра), а также установка значения параметра.
Модуль представляет собой отдельный класс-библиотеку-виджет со стандартизованным интерфейсом. Возможно указание версии интерфейса, что может потребоваться для дальнейших улучшений. Рабочий код модуля исполняется в отдельном потоке (thread). Каждый модуль внутри себя содержит список пунктов меню (QMenu) для добавления в главное окно приложения, QToolBars and etc.

Khameleon Modular System: О главном окне приложения

Главное окно изначально содержит только строку состояния и общую строку меню, содержание которой заполняется самими модулями. Центральным виджетом окна является либо TabWidget или MDI. Список всех доступных модулей должен быть вынесен в отдельное меню, либо диалоговое окно, откуда происходит добавление/удаления модулей на рабочую область. Возможно потребуется создание менеджера модулей, для добавления, удаления модулей и установления связей между ними. Визуальное оформление модулей представлено в виде Widget-ов, которыми заполняются dockWidgets расположение которых задаётся пользователем. Модули могут иметь свои popupMenu и/или свои диалоговые окна.
При запуске программы список модулей читается из конфигурационного файла, который формируется после работы менеджера модулей. На основе этого списка происходит динамическое формирование рабочего окружения.

Khameleon Modular System

Khameleon Modular System
Модульная Система для обработки данных с экспериментальных приборов, управления приборами.
И так, начинаем цикл заметок-соображений о subj-е. Что это вообще такое, и что из себя представляет... это нечто для обработки всего :)
На самом деле всё больше появляется экспериментальных приборов, очень тесно связанных с ПК и требующих порой весьма нетривиальной обработки первичных данных. При таком подходе львиная доля в реализации функционала устройства ложиться на ПО, что и хорошо и плохо одновременно... Почему хорошо, понятно - проще аппаратная часть, дешевле. Плохо же оттого, что софт можно написать и на скорую руку, и через жопу, и чтобы он при этом как-то работал, а количество потраченных нервных клеток конечного пользователя никого не интересует. Даже написаны специальные системы а-ля LabView, которые стоят кучу бабок и содержат в себе всего на все случаи жизни... Но от вида программ, написаных такими монстрами, от скорости их работы, костлявости и кривоты порой "слегка" подташнивает.
Т.о. данный проект в своём зачатке нацелен на "построение коммунизма", хоть и в пределах "своей квартиры", а дальше видно будет.