EWO (внешний виджет)

Что такое внешний виджет?

EWO (External Widget Object = внешний виджет) представляет собой графический объект, который может быть добавлен на любую панель «КАСКАД Цифра».

Виджеты создаются при помощи набора средств Qt (кроссплатформенного инструментария разработки ПО на языке программирования C++), см. http://qt-project.org/. EWO может отображать и содержать любые данные, которые инструментарий Qt позволяет поместить в объект QWidget. EWO динамически загружается в пользовательский интерфейс «КАСКАД Цифра» (EWO компилируется в виде подключаемого модуля и размещается в совместно используемой библиотеке/файле .dll). Свойства EWO могут настраиваться при помощи Редактора свойств GEDI.

EWO могут адресоваться из сценариев на языке Control. EWO также могут вызывать выполнение сценариев путем формирования соответствующих сигналов.

В дополнение к статичным типам данных, между EWO и сценариями «КАСКАД Цифра» может осуществляться обмен данными следующих типов:

  • все типы данных dyn_*, поддерживаемые «КАСКАД Цифра»
  • все типы данных QList <QVariant>

QVariant::Size -> dyn_int с высотой и шириной

QVariant::Polygon -> dyn_dyn_int, где каждая переменная dyn_int соответствует координатам по осям x, y

QVariant::BitArray -> до 32 бит -> bit32; от 33 до 64 бит -> bit64

QVariant::Pen -> string

QVariant::Brush -> string

QVariant::Map -> mapping

В том случае, если QBrush содержит растровое изображение pixmap, то преобразование в строку невозможно. Это означает, что чтение растровых изображений из внешнего виджета возможно только в определенных пределах. Тем не менее возможна запись во внешний виджет при помощи скрипта «КАСКАД Цифра».

ВНИМАНИЕ

Существующие внешние виджеты, которые будут использоваться в новой версии «КАСКАД Цифра», должны быть повторно скомпилированы.

ВНИМАНИЕ

В силу изменений в «КАСКАД Цифра», при привязке EWO к библиотекам Qt (только в случае использования операционной системы Linux), требуется изменение предшествующего объявления класса для библиотек Qt с «class QString;» на «QT_FORWARD_DECLARE_CLASS(QString)«. Для этих целей может использоваться следующий скрипт:

Значение параметра соответствует начальному каталогу исходного кода внешнего виджета.

Нотация «QT_FORWARD_DECLARE_CLASS(xxx)» может использоваться в любой операционной системе. В случае Linux она является обязательной.

#!/bin/shfind $1 -type f -name \*hxx -o -name \*.h | xargs sed -i -e ‘s/^\(class *\)\(Q.*\);/QT_FORWARD_DECLARE_CLASS\(\2\)/’

Реализация внешнего виджета

В качестве основы необходимо использовать класс BaseExternWidget. Также необходимо реализовать как минимум один метод, содержащий данный метод:

QWidget *widget() const = 0

Далее EWO может быть скомпилирован и использован.

Более детальная информация содержится в файле BaseExternWidget.hxx, содержащем описание всех методов (файл находится в директории путь_КАСКАД/api/include).

Пример (cmd для Windows, sh для Linux) находится в директории api/newEWO. Данный пример формирует внешний виджет, который может быть скомпилирован, и который содержит демонстрационный код.

Необходимо учитывать, что переменная окружения API_ROOT установлена на путь к папке /api, содержащейся в каталоге установки. Расширьте недостающие участки кода, отмеченные символом //TODO, своим корректным пользовательским кодом и скомпилируйте EWO. EWO может быть скомпилирован, даже если не было внесено никаких изменений, и в результате получится запускаемый EWO, который предоставляет кнопкам различные сигналы/методы.

Пожалуйста, учитывайте требования к разработке API при создании пользовательских компонентов.

Настройка собственной библиотеки QT

Для реализации внешних виджетов необходимо наличие лицензированных средств разработки Qt, при этом версия средств разработки Qt должна соответствовать версии библиотеки Qt, используемой в «КАСКАД Цифра», в противном случае скомпилированный внешний виджет не сможет быть загружен.

Номер версии Qt, используемой в настоящий момент в «КАСКАД Цифра», может быть отображен в GEDI (см. «О Qt«). В «КАСКАД Цифра» версии 3.14 используется Qt версии.

Установка внешнего виджета

Внешний виджет представляет собой совместно используемую библиотеку (файл .dll) (находящуюся в директории <путь_КАСКАД>/bin), которую необходимо скопировать в директорию проекта <путь_проекта>/bin/widgets, и имя которой должно оканчиваться на .ewo (например, MyWidget.ewo, но не .so или .dll). В качестве альтернативы файл .ewo может быть размещен в одной из следующих поддиректорий, в которых содержатся внешние виджеты, скомпилированные для конкретной платформы:

<путь_проекта>/bin/widgets/windows

<путь_проекта>/bin/widgets/windows-64

<путь_проекта>/bin/widgets/linux

<путь_проекта>/bin/widgets/linux-64

Добавление внешнего виджета на панель

Щелкните левой кнопкой мыши по иконке Внешнего виджета (EWO)  (или выберите в меню «Объекты» элемент меню «Внешний виджет (EWO)…»), в открывшемся диалоговом окне выберите требуемый файл .ewo и создайте на панели прямоугольную область, которая будет соответствовать границам виджета. Далее работа с внешним виджетом аналогична настройке стандартных виджетов (в Редакторе свойств на вкладке «Расширенные» отображены дополнительные события и свойства).

При двойном щелчке по EWO, находящемуся на панели в режиме редактирования, происходит открытие сценария для события Initialize в Редакторе сценариев.

Создание редактора для настроек собственного внешнего виджета

Для настройки некоторых комплексных внешних виджетов в «КАСКАД Цифра» существуют отдельные диалоговые окна настройки / редакторы. Подобные диалоговые окна настройки / редакторы существуют, например, для Trend Widget или Cascade Button. Диалоговые окна настройки / редакторы также могут быть созданы и для собственных внешних виджетов: Разместите сценарий в файле <путь_проекта>/scripts/gedi/<имя-EWO>_ewo.ctl (например, MyWidget_ewo.ctl), который затем сможет открывать панель и взаимодействовать с внешним объектом (см., например, gedi/sp.ctl — openDialog(), getConstructShape()).

Разработка внешнего виджета

paintEvent()

В том случае, если внешний виджет должен самостоятельно масштабировать шрифт в paintEvent(), во избежание повторного изменения шрифта интерфейсом пользователя при масштабировании, в виджете EWO необходимо создать свойство, способ создания которого описан ниже.

Q_PROPERTY(bool avoidFontTransform READ getAvoidFontTransform DESIGNABLE false SCRIPTABLE false)
bool getAvoidFontTransform() const { return true; }

inGedi()

Позволяет изменить характер отображения внешних виджетов в рамках редактора GEDI, например, повысить заметность виджета AttentionEffect.ewo в редакторе.

Q_PROPERTY(bool inGedi READ isInGedi WRITE setInGedi DESIGNABLE false SCRIPTABLE false)
bool isInGedi() const { return inGedi; }

Drop Event

Чтобы использовать перетаскивание для вашего EWO, обработка расположения меню может быть добавлена в вашу реализацию EWO. Чтобы добавить обработку событий в ваш EWO, сам EWO (не QWidget, используемый внутри EWO) должен быть расширен следующей командой в конструкторе EWO:

setProperty("-droppedEvent", QLatin1String("main(string information, int dragType)"));

Аргументы основной функции зависят от аргументов, переданных в качестве значений внутри сигнала. Это означает, что в зависимости от сигнала могут быть реализованы собственные аргументы.

Этот интерфейс используется для скрипта размещения внутри GEDI (как часть редактора свойств).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *