![]() |
Главная · Все классы · Основные классы · Классы по группам · Модули · Функции | ![]() |
Пример "Hierarchy" показывает, как написать внутрипроцессный (in-process) элемент управления ActiveX. Элемент управления является подклассом QWidget с дочерними виджетами, которые доступны как подтипы (sub-types).
Класс QParentWidget предоставляет слоты для создания виджета с именем, и возвращает указатель на именованный (named) виджет. Декларация класса использует Q_CLASSINFO() чтобы предоставить идентификаторы COM для этого класса.
Конструктор QParentWidget создает прямоугольной вертикальной компоновки. Новые дочерние виджеты автоматически добавляются в компоновку.
Слот createSubWidget создает новый QSubWidget с именем, предоставленным в параметре, и устанавливает метку равной этому имени. Виджет показывается также явно.
Слот subWidget использует функцию QObject::child() и возвращает первого потомка типа QSubWidget, который имеет требуемое имя.
Класс QSubWidget имеет одно строковое свойство label и реализует paintEvent чтобы рисовать метку. Класс использует снова Q_CLASSINFO для предоставления идентификаторов COM, и также устанавливает атрибут ToSuperClass равным QSubWidget, чтобы гарантировать, что не открыт ни один слот любого из суперклассов (т.е. QWidget).
Реализация класса QSubWidget не требует объяснений.
The classes are then exported using a QAxFactory. QParentWidget is exported as a full class (which can be created ), while QSubWidget is only exported as a type, which can only be created indirectly through APIs of QParentWidget.
Чтобы собрать пример вы должны сначала собрать библиотеку QAxServer. Затем запустите qmake и ваш make-инструмент в каталоге examples/activeqt/multiple.
Демонстрационная программа требует поддержки элементов управления ActiveX в вашем веб-браузере, а также разрешения выполнения сценариев.
<script language="javascript"> function createSubWidget( form ) { ParentWidget.createSubWidget( form.nameEdit.value ); } function renameSubWidget( form ) { var SubWidget = ParentWidget.subWidget( form.nameEdit.value ); if ( !SubWidget ) { alert( "No such widget " + form.nameEdit.value + "!" ); return; } SubWidget.label = form.labelEdit.value; form.nameEdit.value = SubWidget.label; } function setFont( form ) { ParentWidget.font = form.fontEdit.value; } </script> <p> This widget can have many children! </p> <object ID="ParentWidget" CLASSID="CLSID:d574a747-8016-46db-a07c-b2b4854ee75c" CODEBASE="http://www.trolltech.com/demos/hierarchy.cab"> [Object not available! Did you forget to build and register the server?] </object><br /> <form> <input type="edit" ID="nameEdit" value="<enter object name>" /> <input type="button" value="Create" onClick="createSubWidget(this.form)" /> <input type="edit" ID="labelEdit" /> <input type="button" value="Rename" onClick="renameSubWidget(this.form)" /> <br /> <input type="edit" ID="fontEdit" value="MS Sans Serif" /> <input type="button" value = "Set Font" onClick="setFont(this.form)" /> </form>
Copyright © 2008 Trolltech | Торговые марки | Qt 4.3.5 |