En esta página

QAxBase Class

La clase QAxBase es una clase abstracta que proporciona una API para inicializar y acceder a un objeto COM. Más...

Cabecera: #include <QAxBase>
CMake: find_package(Qt6 REQUIRED COMPONENTS AxContainer)
target_link_libraries(mytarget PRIVATE Qt6::AxContainer)
qmake: QT += axcontainer
Heredado por:

QAxObject y QAxWidget

Tipos Públicos

Funciones Públicas

virtual ~QAxBase()
QVariant asVariant() const
ulong classContext() const
void clear()
QString control() const
void disableClassInfo()
void disableEventSink()
void disableMetaObject()
QVariant dynamicCall(const char *function, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant())
QVariant dynamicCall(const char *function, QList<QVariant> &vars)
QString generateDocumentation()
bool isNull() const
QAxBase::PropertyBag propertyBag() const
virtual bool propertyWritable(const char *prop) const
long queryInterface(const QUuid &uuid, void **iface) const
QAxObject *querySubObject(const char *name, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant())
QAxObject *querySubObject(const char *name, QList<QVariant> &vars)
void setClassContext(ulong classContext)
void setPropertyBag(const QAxBase::PropertyBag &bag)
virtual void setPropertyWritable(const char *prop, bool ok)
QStringList verbs() const

Funciones protegidas

QAxBase()
virtual bool initialize(IUnknown **ptr)
bool initializeActive(IUnknown **ptr)
bool initializeFromFile(IUnknown **ptr)
bool initializeLicensed(IUnknown **ptr)
bool initializeRemote(IUnknown **ptr)

Descripción detallada

QAxBase es una clase abstracta que no puede ser utilizada directamente, y es instanciada a través de las subclases QAxObject y QAxWidget. Esta clase proporciona la API para acceder directamente al objeto COM a través de su implementación IUnknown. Si el objeto COM implementa la interfaz IDispatch, las propiedades y métodos de ese objeto estarán disponibles como propiedades y ranuras de Qt.

connect(buttonBack, SIGNAL(clicked()), webBrowser, SLOT(GoBack()));

Las propiedades expuestas por la implementación IDispatch del objeto se pueden leer y escribir a través del sistema de propiedades proporcionado por el Modelo de Objetos Qt (ambas subclases son QObjects, por lo que se puede utilizar QObject::setProperty() y QObject::property()). Las propiedades con múltiples parámetros no están soportadas.

activeX->setProperty("text", "some text");
int value = activeX->property("value");

Las funciones de escritura para propiedades y otros métodos expuestos por la implementación IDispatch del objeto pueden ser llamados directamente usando dynamicCall(), o indirectamente como ranuras conectadas a una señal.

webBrowser->dynamicCall("GoHome()");

Los eventos salientes soportados por el objeto COM se emiten como señales Qt estándar.

connect(webBrowser, SIGNAL(TitleChanged(QString)),
        this, SLOT(setCaption(QString)));

QAxBase convierte de forma transparente entre los tipos de datos COM y los tipos de datos Qt equivalentes. Algunos tipos COM no tienen una estructura de datos Qt equivalente.

Los tipos de datos COM compatibles se enumeran en la primera columna de la tabla siguiente. La segunda columna es el tipo Qt que puede utilizarse con las funciones de propiedad QObject. La tercera columna es el tipo Qt que se utiliza en el prototipo de señales generadas y ranuras para parámetros de entrada, y la última columna es el tipo Qt que se utiliza en el prototipo de señales y ranuras para parámetros de salida.

Tipo COMPropiedad Qtparámetro de entradaparámetro de salida
VARIANT_BOOLboolboolbool&
BSTRQStringconst QString&QString&
char, short, int, longintintint&
uchar, ushort, uint, ulonguintuintuint&
float, doubledobledobledoble&
FECHAQDateTimeconst QDateTime&QDateTime&
CYqlonglongqlonglongqlonglong&
OLE_COLORQColorconst QColor&QColor&
SAFEARRAY(VARIANTE)QList<QVariant>const QList<QVariant>&QList<QVariant>&
SAFEARRAY(int), SAFEARRAY(double), SAFEARRAY(Date)QList<QVariant>const QList<QVariant>&QList<QVariant>&
SAFEARRAY(BYTE)QByteArrayconst QByteArray&QByteArray&
SAFEARRAY(BSTR)QStringListconst QStringList&QStringList&
VARIANTEdependiente del tipoconst QVariant&QVariant&
IFontDisp*QFontconst QFont&QFont&
IPictureDisp*QPixmapconst QPixmap&QPixmap&
IDispatch*QAxObject*QAxBase::asVariant()QAxObject* (valor de retorno)
IUnknown*QAxObject*QAxBase::asVariant()QAxObject* (valor de retorno)
SCODE, DECIMALno soportadono soportadono soportado
VARIANT* (Desde Qt 4.5)no soportadoQVariant&QVariant&

También se soportan enumeraciones, y typedefs a tipos soportados.

Para llamar a los métodos de una interfaz COM descrita por el siguiente IDL

dispinterface IControl
{
properties:
    [id(1)] BSTR text;
    [id(2)] IFontDisp *font;

methods:
    [id(6)] void showColumn([in] int i);
    [id(3)] bool addColumn([in] BSTR t);
    [id(4)] int fillList([in, out] SAFEARRAY(VARIANT) *list);
    [id(5)] IDispatch *item([in] int i);
};

utilice la API QAxBase de esta manera:

QAxObject object("<CLSID>");

QString text = object.property("text").toString();
object.setProperty("font", QFont("Times New Roman", 12));

connect(this, SIGNAL(clicked(int)), &object, SLOT(showColumn(int)));
bool ok = object.dynamicCall("addColumn(const QString&)", "Column 1").toBool();

QList<QVariant> varlist;
QList<QVariant> parameters;
parameters << QVariant(varlist);
int n = object.dynamicCall("fillList(QList<QVariant>&)", parameters).toInt();

QAxObject *item = object.querySubItem("item(int)", 5);

Tenga en cuenta que el QList que el objeto debe llenar tiene que ser proporcionado como un elemento en la lista de parámetros de QVariants.

Si necesita acceder a propiedades o pasar parámetros de tipos de datos no soportados debe acceder al objeto COM directamente a través de su implementación IDispatch u otras interfaces. Dichas interfaces pueden obtenerse a través de queryInterface().

IUnknown *iface = 0;
activeX->queryInterface(IID_IUnknown, (void**)&iface);
if (iface) {
    // use the interface
    iface->Release();
}

Para obtener la definición de las interfaces COM tendrás que utilizar los ficheros de cabecera proporcionados con el componente que quieras utilizar. Algunos compiladores también pueden importar bibliotecas de tipos utilizando la directiva del compilador #import. Consulte la documentación del componente para saber qué bibliotecas de tipos tiene que importar y cómo utilizarlas.

Si necesitas reaccionar a eventos que pasan parámetros de tipos de datos no soportados puedes utilizar la señal genérica que entrega los datos del evento tal y como los proporciona el evento COM.

Véase también QAxObject, QAxWidget, QAxScript, y ActiveQt Framework.

Documentación de tipos de miembros

[alias] QAxBase::PropertyBag

Un QMap<QString,QVariant> que puede almacenar propiedades como pares nombre:valor.

Documentación de las funciones miembro

[protected] QAxBase::QAxBase()

Crea un objeto QAxBase.

[virtual noexcept] QAxBase::~QAxBase()

Cierra el objeto COM y destruye el objeto QAxBase.

Véase también clear().

QVariant QAxBase::asVariant() const

Devuelve un QVariant que envuelve el objeto COM. La variante puede utilizarse como parámetro, por ejemplo, en dynamicCall().

ulong QAxBase::classContext() const

Devuelve el contexto en el que se ejecutará el control ActiveX (por defecto CLSCTX_SERVER).

Véase también setClassContext().

void QAxBase::clear()

Desconecta y destruye el objeto COM.

Si reimplementa esta función, también debe reimplementar el destructor para llamar a clear(), y llamar a esta implementación al final de su función clear().

QString QAxBase::control() const

Devuelve el control ActiveX.

void QAxBase::disableClassInfo()

Desactiva la generación de información de clase para este contenedor ActiveX. Si no necesita ninguna información de clase sobre el control ActiveX utilice esta función para acelerar la generación del meta objeto.

Tenga en cuenta que esta función debe llamarse inmediatamente después de la construcción del objeto

void QAxBase::disableEventSink()

Desactiva la implementación del receptor de eventos para este contenedor ActiveX. Si no tiene intención de escuchar los eventos del control ActiveX utilice esta función para acelerar la generación de metaobjetos.

Algunos controles ActiveX pueden ser inestables cuando se conectan a un sink de eventos. Para obtener eventos OLE debe utilizar métodos COM estándar para registrar su propio sumidero de eventos. Utilice queryInterface() para acceder al objeto COM sin procesar.

Tenga en cuenta que esta función debe ser llamada inmediatamente después de la construcción del objeto.

void QAxBase::disableMetaObject()

Desactiva la generación de metaobjetos para este contenedor ActiveX. Esto también desactiva la generación de eventos e información de clase. Si no tiene intención de utilizar la implementación del meta objeto Qt, llame a esta función para acelerar la instanciación del control. Aún podrá llamar al objeto a través de dynamicCall(), pero las señales, ranuras y propiedades no estarán disponibles con las APIs de QObject.

Algunos controles ActiveX pueden ser inestables cuando se utilizan con automatización OLE. Utilice métodos COM estándar para utilizar esos controles a través de las interfaces COM proporcionadas por queryInterface().

Tenga en cuenta que esta función debe llamarse inmediatamente después de la construcción del objeto.

QVariant QAxBase::dynamicCall(const char *function, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant())

Llama al método del objeto COM function, pasando los parámetros var1, var1, var2, var3, var4, var5, var6, var7 y var8, y devuelve el valor devuelto por el método, o un QVariant inválido si el método no devuelve un valor o cuando la llamada a la función ha fallado.

Si function es un método del objeto, la cadena debe proporcionarse como el prototipo completo, por ejemplo como se escribiría en una llamada a QObject::connect().

activeX->dynamicCall("Navigate(const QString&)", "www.qt-project.org");

Alternativamente, se puede llamar a una función pasando los parámetros incrustados en la cadena, por ejemplo, la función anterior también se puede invocar utilizando

activeX->dynamicCall("Navigate(\"www.qt-project.org\")");

Todos los parámetros se pasan como cadenas; depende del control que se interpreten correctamente, y es más lento que utilizar el prototipo con parámetros correctamente tipados.

Si function es una propiedad la cadena tiene que ser el nombre de la propiedad. Se llama al setter de la propiedad cuando var1 es un QVariant válido, en caso contrario se llama al getter.

activeX->dynamicCall("Value", 5);
QString text = activeX->dynamicCall("Text").toString();

Tenga en cuenta que es más rápido obtener y establecer propiedades utilizando QObject::property() y QObject::setProperty().

dynamicCall() también se puede utilizar para llamar a objetos con una envoltura disabled metaobject, lo que puede mejorar significativamente el rendimiento, especialmente cuando se llama a muchos objetos de diferentes tipos durante un proceso de automatización. Sin embargo, ActiveQt no validará los parámetros.

Sólo es posible llamar a funciones a través de dynamicCall() que tengan parámetros o valores de retorno de tipos de datos soportados por QVariant. Consulte la documentación de la clase QAxBase para obtener una lista de los tipos de datos admitidos y no admitidos. Si desea llamar a funciones que tienen tipos de datos no admitidos en la lista de parámetros, utilice queryInterface() para recuperar la interfaz COM apropiada y utilice la función directamente.

IWebBrowser2 *webBrowser = 0;
activeX->queryInterface(IID_IWebBrowser2, (void **)&webBrowser);
if (webBrowser) {
    webBrowser->Navigate2(pvarURL);
    webBrowser->Release();
}

Esto también es más eficaz.

QVariant QAxBase::dynamicCall(const char *function, QList<QVariant> &vars)

Llama al método del objeto COM function, pasando los parámetros en vars, y devuelve el valor devuelto por el método. Si el método no devuelve un valor o cuando la llamada a la función falla, esta función devuelve un objeto QVariant no válido.

Los objetos QVariant en vars se actualizan cuando el método tiene parámetros de salida.

Se trata de una función sobrecargada.

QString QAxBase::generateDocumentation()

Devuelve una cadena de texto enriquecido con la documentación del objeto COM envuelto. Vuelque la cadena en un archivo HTML o utilícela, por ejemplo, en un widget de QTextBrowser.

[virtual protected] bool QAxBase::initialize(IUnknown **ptr)

Esta función virtual es llamada por setControl() y crea el objeto COM solicitado. ptr se establece en la implementación IUnknown del objeto. La función devuelve true si la inicialización del objeto se ha realizado correctamente; en caso contrario, la función devuelve false.

La implementación por defecto interpreta la cadena devuelta por control(), y llama a initializeRemote(), initializeLicensed() o initializeActive() si la cadena coincide con los patrones respectivos. Si control() es el nombre de un archivo existente, se llama a initializeFromFile(). Si no coincide ningún patrón, o si falla la inicialización remota o bajo licencia, se utiliza CoCreateInstance directamente para crear el objeto.

Consulte la documentación de la propiedad QAxBaseWidget::control para obtener más información sobre los patrones admitidos.

La interfaz devuelta en ptr debe ser referenciada exactamente una vez cuando esta función devuelve. La interfaz proporcionada por, por ejemplo, CoCreateInstance ya está referenciada, y no es necesario referenciarla de nuevo.

[protected] bool QAxBase::initializeActive(IUnknown **ptr)

Se conecta a una instancia activa que se está ejecutando en la máquina actual y devuelve la interfaz IUnknown del objeto en ejecución en ptr. Esta función devuelve true si tiene éxito, en caso contrario devuelve false.

Esta función es llamada por initialize() si la cadena de control contiene la subcadena "}&".

Véase también initialize().

[protected] bool QAxBase::initializeFromFile(IUnknown **ptr)

Crea el objeto COM manejando el nombre de archivo en la propiedad control, y devuelve la interfaz IUnknown al objeto en ptr. Esta función devuelve true si tiene éxito, en caso contrario devuelve false.

Esta función es llamada por initialize() si la cadena de control es el nombre de un archivo existente.

Véase también initialize().

[protected] bool QAxBase::initializeLicensed(IUnknown **ptr)

Crea una instancia de un control con licencia y devuelve la interfaz IUnknown al objeto en ptr. Esta función devuelve true si tiene éxito, en caso contrario devuelve false.

Esta función es llamada por initialize() si la cadena del control contiene la subcadena "}:". La clave de licencia debe ir a continuación de esta subcadena.

Véase también initialize().

[protected] bool QAxBase::initializeRemote(IUnknown **ptr)

Crea la instancia en un servidor remoto y devuelve la interfaz IUnknown del objeto en ptr. Esta función devuelve true si tiene éxito, en caso contrario devuelve false.

Esta función es llamada por initialize() si la cadena de control contiene la subcadena "/{". La información sobre la máquina remota debe proporcionarse delante de la subcadena.

Véase también initialize().

bool QAxBase::isNull() const

Devuelve true si no hay ningún objeto COM cargado por esta envoltura; en caso contrario devuelve false.

Véase también control().

QAxBase::PropertyBag QAxBase::propertyBag() const

Devuelve un mapa nombre:valor de todas las propiedades expuestas por el objeto COM.

Esto es más eficiente que obtener múltiples propiedades individualmente si el objeto COM soporta bolsas de propiedades.

Advertencia: No se garantiza que la implementación de la bolsa de propiedades del objeto COM devuelva todas las propiedades, o que las propiedades devueltas sean las mismas que las disponibles a través de la interfaz IDispatch.

Véase también setPropertyBag().

[virtual] bool QAxBase::propertyWritable(const char *prop) const

Devuelve true si la propiedad prop es escribible; en caso contrario devuelve false. Por defecto, todas las propiedades son escribibles.

Atención: Dependiendo de la implementación del control, este parámetro puede ser ignorado para algunas propiedades.

Véase también setPropertyWritable(), QAxBaseWidget::propertyChanged(), y QAxBaseObject::propertyChanged().

long QAxBase::queryInterface(const QUuid &uuid, void **iface) const

Solicita la interfaz uuid del objeto COM y establece el valor de iface en la interfaz proporcionada, o en 0 si no se ha podido proporcionar la interfaz solicitada.

Devuelve el resultado de la implementación de QueryInterface del objeto COM.

Véase también control().

QAxObject *QAxBase::querySubObject(const char *name, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant())

Devuelve un puntero a un QAxObject que envuelve el objeto COM proporcionado por el método o propiedad name, pasando los parámetros var1, var1, var2, var3, var4, var5, var6, var7 y var8.

Si name es proporcionado por un método la cadena debe incluir el prototipo completo de la función.

Si name es una propiedad, la cadena debe ser el nombre de la propiedad, y var1, ... var8 se ignoran.

El QAxObject devuelto es un hijo de este objeto (que es de tipo QAxObject o QAxWidget), y se elimina cuando se elimina este objeto. Sin embargo, es seguro borrar el objeto devuelto, y debería hacerlo cuando itere sobre listas de subobjetos.

Las aplicaciones habilitadas para COM suelen tener un modelo de objetos que publica ciertos elementos de la aplicación como interfaces de despacho. Utilice este método para navegar por la jerarquía del modelo de objetos, por ejemplo

QAxWidget outlook("Outlook.Application");
QAxObject *session = outlook.querySubObject("Session");
if (session) {
    QAxObject *defFolder = session->querySubObject(
                            "GetDefaultFolder(OlDefaultFolders)",
                            "olFolderContacts");
    //...
}

QAxObject *QAxBase::querySubObject(const char *name, QList<QVariant> &vars)

Los objetos QVariant en vars se actualizan cuando el método tiene parámetros de salida.

Se trata de una función sobrecargada.

void QAxBase::setClassContext(ulong classContext)

Establece el contexto en el que se ejecutará el control ActiveX classContext

Afecta al argumento "dwClsContext" cuando se llama a CoCreateInstance. Se puede utilizar para controlar el inicio dentro del proceso frente al inicio fuera del proceso para los controles que admiten ambas alternativas. También puede utilizarse para modificar/reducir los permisos de control cuando se utiliza con CLSCTX_ENABLE_CLOAKING y un token de suplantación.

Tenga en cuenta que esta función debe llamarse antes de setControl() para que tenga efecto.

Véase también classContext().

void QAxBase::setPropertyBag(const QAxBase::PropertyBag &bag)

Establece las propiedades del objeto COM a los valores correspondientes en bag.

Advertencia: Sólo debes establecer las bolsas de propiedades que han sido devueltas por la función propertyBag, ya que no se puede garantizar que la implementación de la bolsa de propiedades del objeto COM soporte las mismas propiedades que están disponibles a través de la interfaz IDispatch.

Véase también propertyBag().

[virtual] void QAxBase::setPropertyWritable(const char *prop, bool ok)

Establece la propiedad prop como escribible si ok es verdadero, en caso contrario establece prop como sólo lectura. Por defecto, todas las propiedades son escribibles.

Atención: Dependiendo de la implementación del control, este parámetro puede ser ignorado para algunas propiedades.

Ver también propertyWritable(), QAxBaseWidget::propertyChanged(), y QAxBaseObject::propertyChanged().

QStringList QAxBase::verbs() const

Devuelve la lista de verbos que el objeto COM puede ejecutar. Si el objeto no implementa IOleObject, o no soporta ningún verbo, entonces esta función devuelve una lista de cadenas vacía.

Tenga en cuenta que los verbos OLE por defecto (OLEIVERB_SHOW etc) no están incluidos en la lista.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.