| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the documentation of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:FDL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU Free Documentation License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Free |
| ** Documentation License version 1.3 as published by the Free Software |
| ** Foundation and appearing in the file included in the packaging of |
| ** this file. Please review the following information to ensure |
| ** the GNU Free Documentation License version 1.3 requirements |
| ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| /*! |
| \page qaxserver-demo-opengl.html |
| |
| \title OpenGL in an HTML page |
| |
| \raw HTML |
| <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.qt-project.org/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> |
| \endraw |
| */ |
| |
| /*! |
| \example activeqt/opengl |
| \title OpenGL Example (ActiveQt) |
| |
| \brief 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. |
| The server executable can run both as an ActiveX server and as a |
| stand-alone application. |
| |
| The ActiveX control in this example uses the QGlWidget class in |
| Qt to render an OpenGL scene in an ActiveX. The control exposes a few |
| methods to change the scene. |
| |
| The application uses QAxFactory through the \c QAXFACTORY_BEGIN(), |
| \c QAXCLASS() and \c QAXFACTORY_END() macros to expose the |
| \c GLBox widget as an ActiveX control. |
| \snippet activeqt/opengl/main.cpp 0 |
| The implementation of \c main initializes the QApplication object, |
| and uses \c QAxFactory::isServer() to determine whether or not it is |
| appropriate to create and show the application interface. |
| \snippet activeqt/opengl/main.cpp 1 |
| \snippet activeqt/opengl/main.cpp 2 |
| \snippet activeqt/opengl/main.cpp 3 |
| |
| The \c GLBox class inherits from both the \l QOpenGLWidget class to be able |
| to render OpenGL, and from \l QAxBindable. |
| \snippet activeqt/opengl/glbox.h 0 |
| The class reimplements the \l QAxBindable::createAggregate() function from QAxBindable |
| to return the pointer to a \l QAxAggregated object. |
| \snippet activeqt/opengl/glbox.h 1 |
| |
| The implementation file of the \c GLBox class includes the \c objsafe.h |
| system header, in which the \c IObjectSafety COM interface is defined. |
| \snippet activeqt/opengl/glbox.cpp 0 |
| A class \c ObjectSafetyImpl is declared using multiple inheritance |
| to subclass the QAxAggregated class, and to implement the IObjectSafety |
| interface. |
| \snippet activeqt/opengl/glbox.cpp 1 |
| The class declares a default constructor, and implements the queryInterface |
| function to support the IObjectSafety interface. |
| \snippet activeqt/opengl/glbox.cpp 2 |
| Since every COM interface inherits \c IUnknown the \c QAXAGG_IUNKNOWN macro |
| is used to provide the default implementation of the \c IUnknown interface. |
| The macro is defined to delegate all calls to \c QueryInterface, \c AddRef |
| and \c Release to the interface returned by the controllingUnknown() function. |
| \snippet activeqt/opengl/glbox.cpp 3 |
| The implementation of the \c IObjectSafety interface provides the caller |
| with information about supported and enabled safety options, and returns |
| \c S_OK for all calls to indicate that the ActiveX control is safe. |
| \snippet activeqt/opengl/glbox.cpp 4 |
| The implementation of the \c createAggregate() function just returns a new |
| \c ObjectSafetyImpl object. |
| \snippet activeqt/opengl/glbox.cpp 5 |
| |
| To build the example you must first build the QAxServer library. |
| Then run \c qmake and your make tool in \c |
| examples/activeqt/wrapper. |
| |
| The \l{qaxserver-demo-opengl.html}{demonstration} requires your |
| WebBrowser to support ActiveX controls, and scripting to be |
| enabled. |
| |
| In contrast to the other QAxServer examples Internet Explorer will not |
| open a dialog box to ask the user whether or not the scripting of the GLBox |
| control should be allowed (the exact browser behaviour depends on the security |
| settings in the Internet Options dialog). |
| |
| \input doc/src/examples/opengl-demo.qdocinc |
| */ |