Вы можете хотеть хранить больше информации об устройстве или формате, чем IDeviceInfo
и объекты IDeviceFormat
позволяют. Один способ сделать это должно задать новый класс, который содержит эту дополнительную информацию. Затем в вашем адаптере инстанцируйте объекта этого класса и сохраните его в данных об адаптере объектов IDeviceFormat
или IDeviceInfo
. Используя адаптер данные являются хорошим способом раздать важную информацию в вашем адаптере, потому что IDeviceInfo
и объекты IDeviceFormat
передаются другим функциям адаптера.
Используя адаптер данные являются процессом с тремя шагами:
Задайте класс, чтобы содержать информацию об устройстве или данные о формате. Смотрите Определение Класса Информации об устройстве или Данных о формате для получения дополнительной информации.
Инстанцируйте объекта этого класса в вашем адаптере. Используйте конструктора, которого вы задаете для своего класса.
Храните объект в данных об адаптере объекта IDeviceInfo
или IDeviceFormat
. Смотрите Хранящие Данные об Адаптере для получения дополнительной информации.
Класс, который вы задаете, чтобы сохранить дополнительное устройство или данные о формате, должен быть выведен от класса IMAQinterface
. Разделение на подклассы класса IMAQInterface
гарантирует, что все освобождение памяти для этих классов направляется через механизм тулбокса.
Для примера такого класса смотрите класс DemoDeviceFormat
в демонстрационном адаптере, заданном в файле DemoDeviceFormat.h
.
Чтобы сохранить ваше устройство или класс формата в данных об адаптере объекта IDeviceInfo
или IDeviceFormat
, используйте функцию членства setAdaptorData()
объекта.
Объекты, которые вы храните в данных об адаптере, автоматически уничтожаются, когда IDeviceInfo
и объекты IDeviceFormat
уничтожаются. Если вы храните объект в данных об адаптере, не пытайтесь уничтожить объекты сами.
Демонстрационный адаптер обеспечивает пример, задавая класс, чтобы содержать дополнительные данные о формате. Этот класс, названный DemoDeviceFormat
, хранит данные о формате, такие как ширина, высота и цветовое пространство. Следующий пример, взятый из демонстрационного адаптера, показывает, как инстанцировать объекта этого производного класса, значений присвоения к элементам данных класса, и затем хранить объект в данных об адаптере объекта IDeviceFormat
.
DemoDeviceFormat* rgbFormatInfo = new DemoDeviceFormat(); rgbFormatInfo->setFormatWidth(demo::RGB_FORMAT_WIDTH); rgbFormatInfo->setFormatHeight(demo::RGB_FORMAT_HEIGHT); rgbFormatInfo->setFormatNumBands(demo::RGB_FORMAT_BANDS); rgbFormatInfo->setFormatColorSpace(imaqkit::colorspaces::RGB); deviceFormat->setAdaptorData(rgbFormatInfo);
Чтобы получить доступ к данным об адаптере, хранимым в объекте IDeviceInfo
или IDeviceFormat
, используйте функцию членства getAdaptorData()
объекта.
Следующий пример, взятый из демонстрационного адаптера, показывает, как получить данные об адаптере от объекта IDeviceFormat
. В примере selectedFormat
является объектом DemoDeviceFormat
. Обратите внимание на то, что, потому что функция членства getAdaptorData()
возвращает указатель на класс IMAQInterface
, необходимо бросить возвращенный объект к заданному классу.
dynamic_cast<DemoDeviceFormat*>(selectedFormat->getAdaptorData());