Главная · Все классы · Основные классы · Классы по группам · Модули · Функции

Пример "OpenGL" (ActiveQt)

The OpenGL example demonstrates the use of the default factory and QAxFactory::isServer(), and the implementation of an additional COM interface using QAxBindable and QAxAggregated. Исполняемый файл сервера можно запустить и как ActiveX-сервер и как автономное приложение.

Элемент управления ActiveX в этом примере использует класс QGlWidget в Qt для визуализации сцены OpenGL в ActiveX. Элемент управления делает видимым несколько методов изменения сцены.

Приложение использует фабрику по умолчанию как предоставляет макрос QAXFACTORY_DEFAULT чтобы сделать видимым виджет GLBox как элемент управления ActiveX.


Реализация main инициализирует объект QApplication и использует QAxFactory::isServer() для определения подойдет ли она или нет для создания и показа интерфейса приложения.


The GLBox class inherits from both the QGLWidget class to be able to render OpenGL, and from QAxBindable.


The class reimplements the QAxBindable::createAggregate() function from QAxBindable to return the pointer to a QAxAggregated object.


Остальная часть объявление класса и реализации визуализации OpenGL является такой же что и в оригинальном примере "box".

Файл реализации класса GLBox включает в себя системный заголовочный файл objsafe.h, в котором определён интерфейс COM IObjectSafety.


A class ObjectSafetyImpl is declared using multiple inheritance to subclass the QAxAggregated class, and to implement the IObjectSafety interface.


Класс объявляет конструктор по умолчанию и реализует функцию queryInterface для поддержки интерфейса IObjectSafety.


Поскольку каждый интерфейс COM унаследован от IUnknown макрос QAXAGG_IUNKNOWN используется для предоставления реализацию по умолчанию интерфейса IUnknown. Макрос определён для делегирования всех вызовов QueryInterface, AddRef и Release для интерфейса, возвращаемого функцией controllingUnknown().


Реализация интерфейса IObjectSafety предоставляет вызывающему информацию о поддерживаемых и включенных опциях безопасности, а возвращает S_OK для всех вызовов чтобы показать, что элемент управления ActiveX является безопасным.


Реализация функции createAggregate() возвращает только новый объект ObjectSafetyImpl.


Чтобы собрать пример вы должны сначала собрать библиотеку QAxServer. Затем запустите qmake и ваш make-инструмент в каталоге examples/activeqt/wrapper.

Демонстрационная программа требует поддержки элементов управления ActiveX в вашем веб-браузере, а также разрешения выполнения сценариев.

В отличие от других примеров QAxServer Internet Explorer не откроет диалоговое окно для запроса у пользователя будет или нет разрешено выполнение сценариев элемента управления GLBox (точное поведение браузера зависит от настроек безопасности в диалоге Internet Options).

 <SCRIPT LANGUAGE="JavaScript">
 function setRot( form )
 {
     GLBox.setXRotation( form.XEdit.value );
     GLBox.setYRotation( form.YEdit.value );
     GLBox.setZRotation( form.ZEdit.value );
 }
 </SCRIPT>

 <p />
 An OpenGL scene:<br />
 <object ID="GLBox" CLASSID="CLSID:5fd9c22e-ed45-43fa-ba13-1530bb6b03e0"
 CODEBASE="http://www.trolltech.com/demos/openglax.cab">
 [Object not available! Did you forget to build and register the server?]
 </object><br />

 <form>
 Rotate the scene:<br />
 X:<input type="edit" ID="XEdit" value="0" /><br />
 Y:<input type="edit" name="YEdit" value="0" /><br />
 Z:<input type="edit" name="ZEdit" value="0" /><br />
 <input type="button" value="Set" onClick="setRot(this.form)" />
 </form>


Copyright © 2008 Trolltech Торговые марки
Qt 4.3.5