Сходства и различия визуальных компонентов CLX и VCL
Большинство свойств и методов компонентов VCL и CLX идентичны. А существующие различия вызваны необходимостью использования специальных объектов – widget и особенностями представления визуальных элементов в Linux.
Базовые классы CLX – TControl и Twidgetcontrol для обеспечения прорисовки обращаются к динамической библиотеке Qt через заголовочный файл Qt.pas.
Таким образом, разработчик избавлен от необходимости работы с графическим интерфейсом Linux на низком уровне.
Для компонента CLX существует свойство:
property Handle: QWidgetH;
Которое является указателем на связанный объект widget и позволяет вызывать его методы напрямую.
Если экземпляр widget не создан, метод:
procedure CreateHandle; virtual;
Не только создает и инициализирует widget, но и устанавливает указатель Handle, создает объекты-перехватчики (см. ниже) и задает настройки по умолчанию для этого визуального компонента. При необходимости в классах-потомках метод CreateHandle перекрывается и в него добавляется новая функциональность.
Уничтожение созданного widget осуществляется методом:
procedure DestroyHandle;
Который уничтожает все дочерние widget и объекты-перехватчики, а также обнуляет свойства Handle и Hooks.
При необходимости для простого создания и инициализации widget можно использовать метод:
procedure CreateWidget; virtual;
Который сделает это, вызвав внешнюю функцию Qwidget_Create, и метод:
procedure InitWidget; virtual;
Который определяет визуальные параметры widget.
Также в классах CLX доступен указатель на родительский widget за счет использования свойства:
property ParentWidget: QWidgetH;
Если это свойство не определено, можно использовать свойство:
property ChildHandle: QWidgetH;
Родительского класса, например, таким образом:
if Not Assigned(ParentWidget) then if Assigned(Parent) then Result: = Parent.ChildHandle;
В классах CLX иначе реализована обработка событий. В Linux все события делятся на два вида – системные и события widget. Системные события обрабатываются процедурой – аналогом процедуры wndProc для компонентов VCL.