QAxFactory Class
La classe QAxFactory définit une usine pour la création de composants COM. Plus d'informations...
| En-tête : | #include <QAxFactory> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS AxServer)target_link_libraries(mytarget PRIVATE Qt6::AxServer) |
| qmake : | QT += axserver |
| Héritages : | QObject |
Types publics
| enum | ServerType { SingleInstance, MultipleInstances } |
Fonctions publiques
| QAxFactory(const QUuid &libid, const QUuid &appid) | |
| virtual | ~QAxFactory() override |
| virtual QUuid | appID() const |
| virtual QUuid | classID(const QString &key) const |
| virtual QObject * | createObject(const QString &key) = 0 |
| virtual bool | createObjectWrapper(QObject *object, IDispatch **wrapper) |
| virtual QUuid | eventsID(const QString &key) const |
| virtual QString | exposeToSuperClass(const QString &key) const |
| virtual QStringList | featureList() const = 0 |
| virtual bool | hasStockEvents(const QString &key) const |
| virtual QUuid | interfaceID(const QString &key) const |
| virtual bool | isService() const |
| virtual const QMetaObject * | metaObject(const QString &key) const = 0 |
| virtual void | registerClass(const QString &key, QSettings *settings) const |
| virtual bool | stayTopLevel(const QString &key) const |
| virtual QUuid | typeLibID() const |
| virtual void | unregisterClass(const QString &key, QSettings *settings) const |
| virtual bool | validateLicenseKey(const QString &key, const QString &licenseKey) const |
Membres publics statiques
| bool | isServer() |
| bool | registerActiveObject(QObject *object) |
| QString | serverDirPath() |
| QString | serverFilePath() |
| bool | startServer(QAxFactory::ServerType type = MultipleInstances) |
| bool | stopServer() |
Macros
| QAXCLASS(Class) | |
| QAXFACTORY_BEGIN(IDTypeLib, IDApp) | |
| QAXFACTORY_END() | |
| QAXFACTORY_EXPORT(Class, LibID, AppID) | |
| QAXTYPE(Class) |
Description détaillée
Implémentez cette fabrique une fois dans votre serveur COM pour fournir des informations sur les composants que le serveur peut créer. Sous-classe QAxFactory et implémentation des fonctions virtuelles pures dans n'importe quel fichier d'implémentation (par exemple main.cpp), et exportation de la fabrique à l'aide de la macro QAXFACTORY_EXPORT().
QStringList ActiveQtFactory::featureList() const { QStringList list; list << "ActiveX1"; list << "ActiveX2"; return list; } QObject *ActiveQtFactory::createObject(const QString &key) { if (key == "ActiveX1") return new ActiveX1(parent); if (key == "ActiveX2") return new ActiveX2(parent); return 0; } const QMetaObject *ActiveQtFactory::metaObject(const QString &key) const { if (key == "ActiveX1") return &ActiveX1::staticMetaObject; if (key == "ActiveX2") return &ActiveX2::staticMetaObject; } QUuid ActiveQtFactory::classID(const QString &key) const { if (key == "ActiveX1") return "{01234567-89AB-CDEF-0123-456789ABCDEF}"; ... return QUuid(); } QUuid ActiveQtFactory::interfaceID(const QString &key) const { if (key == "ActiveX1") return "{01234567-89AB-CDEF-0123-456789ABCDEF}"; ... return QUuid(); } QUuid ActiveQtFactory::eventsID(const QString &key) const { if (key == "ActiveX1") return "{01234567-89AB-CDEF-0123-456789ABCDEF}"; ... return QUuid(); } QAXFACTORY_EXPORT( ActiveQtFactory, // factory class "{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID "{01234567-89AB-CDEF-0123-456789ABCDEF}" // application ID )
Si vous utilisez la macro Q_CLASSINFO() pour fournir les identificateurs uniques ou d'autres attributs pour votre classe, vous pouvez utiliser les macros QAXFACTORY_BEGIN(), QAXCLASS() et QAXFACTORY_END() pour exposer une ou plusieurs classes en tant qu'objets COM.
QAXFACTORY_BEGIN(
"{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
"{01234567-89AB-CDEF-0123-456789ABCDEF}" // application ID
)
QAXCLASS(Class1)
QAXCLASS(Class2)
QAXFACTORY_END()Une seule implémentation de QAxFactory peut être instanciée et exportée par une application serveur ActiveX. Cette instance est accessible via la fonction globale qAxFactory().
Une fabrique peut également réimplémenter les fonctions registerClass() et unregisterClass() pour définir des drapeaux supplémentaires pour un contrôle ActiveX dans le registre. Pour limiter le nombre de méthodes ou de propriétés qu'une classe de widget expose à partir de ses classes parentes, réimplémentez la fonction exposeToSuperClass().
Voir également QAxAggregated, QAxBindable, et ActiveQt Framework.
Documentation sur les types de membres
enum QAxFactory::ServerType
Cette énumération spécifie les différents types de serveurs qui peuvent être démarrés à l'aide de startServer.
| Constante | Valeur | Description |
|---|---|---|
QAxFactory::SingleInstance | 0 | Le processus serveur ne peut créer qu'une seule instance de chaque classe exportée. COM lance un nouveau processus pour chaque demande. Cette fonction est généralement utilisée par les serveurs qui n'exportent qu'une seule classe pouvant être créée. |
QAxFactory::MultipleInstances | 1 | Le serveur peut créer plusieurs instances de chaque classe exportée. C'est l'option par défaut. Toutes les instances vivront dans le même thread et partageront les ressources statiques. |
Documentation des fonctions membres
QAxFactory::QAxFactory(const QUuid &libid, const QUuid &appid)
Construit un objet QAxFactory qui renvoie libid et appid dans l'implémentation des fonctions d'interface respectives.
[override virtual noexcept] QAxFactory::~QAxFactory()
Détruit l'objet QAxFactory.
[virtual] QUuid QAxFactory::appID() const
Réimplémenter cette fonction pour renvoyer l'identifiant de l'application du serveur ActiveX.
[virtual] QUuid QAxFactory::classID(const QString &key) const
Réimplémenter cette fonction pour renvoyer l'identifiant de la classe pour chaque key renvoyé par l'implémentation featureList(), ou un QUuid vide si cette fabrique ne prend pas en charge la valeur de key.
L'implémentation par défaut interprète key comme le nom de la classe et renvoie la valeur de l'entrée "ClassID" de Q_CLASSINFO().
[pure virtual] QObject *QAxFactory::createObject(const QString &key)
Réimplémenter cette fonction pour renvoyer un nouvel objet pour key, ou 0 si cette fabrique ne prend pas en charge la valeur de key.
Si l'objet renvoyé est un QWidget, il sera exposé comme un contrôle ActiveX, sinon l'objet renvoyé sera exposé comme un simple objet COM.
[virtual] bool QAxFactory::createObjectWrapper(QObject *object, IDispatch **wrapper)
Réimplémenter cette fonction pour fournir l'objet COM pour object dans wrapper. Elle renvoie true si la fonction a réussi ; sinon, elle renvoie false.
L'implémentation par défaut crée une enveloppe d'automatisation générique basée sur les méta-informations d'objet de object.
[virtual] QUuid QAxFactory::eventsID(const QString &key) const
Réimplémenter cette fonction pour renvoyer l'identifiant de l'interface d'événement pour chaque key renvoyé par l'implémentation featureList(), ou un QUuid vide si cette fabrique ne prend pas en charge la valeur de key.
L'implémentation par défaut interprète key comme le nom de la classe et renvoie la valeur de l'entrée "EventsID" de Q_CLASSINFO().
[virtual] QString QAxFactory::exposeToSuperClass(const QString &key) const
Réimplémenter cette fonction pour renvoyer le nom de la super-classe de key jusqu'à laquelle les méthodes et les propriétés doivent être exposées par le contrôle ActiveX.
L'implémentation par défaut interprète key comme le nom de la classe et renvoie la valeur de l'entrée "ToSuperClass" de Q_CLASSINFO(). Si cette valeur n'est pas définie, la chaîne nulle est renvoyée et les fonctions et propriétés de toutes les superclasses, y compris QWidget, sont exposées.
Pour n'exposer que les fonctions et propriétés de la classe elle-même, réimplémentez cette fonction pour qu'elle renvoie key.
[pure virtual] QStringList QAxFactory::featureList() const
Réimplémenter cette fonction pour renvoyer une liste des widgets (noms de classes) pris en charge par cette fabrique.
[virtual] bool QAxFactory::hasStockEvents(const QString &key) const
Réimplémentez cette fonction pour qu'elle renvoie un message vrai si le contrôle ActiveX key doit prendre en charge les événements ActiveX standard.
- Clic
- DblClick
- Touche enfoncée
- Appui sur le clavier
- ToucheUp
- Souris vers le bas
- SourisUp
- Déplacement de la souris
L'implémentation par défaut interprète key comme le nom de la classe et renvoie la valeur "true" si la valeur de l'entrée "StockEvents" de Q_CLASSINFO() est "yes". Dans le cas contraire, cette fonction renvoie la valeur false.
[virtual] QUuid QAxFactory::interfaceID(const QString &key) const
Réimplémenter cette fonction pour renvoyer l'identifiant d'interface pour chaque key renvoyé par l'implémentation featureList(), ou un QUuid vide si cette fabrique ne prend pas en charge la valeur de key.
L'implémentation par défaut interprète key comme le nom de la classe et renvoie la valeur de l'entrée "InterfaceID" de Q_CLASSINFO().
[static] bool QAxFactory::isServer()
Retourne true si l'application a été démarrée (par COM) en tant que serveur ActiveX, sinon retourne false.
int main(int argc, char *argv[]) { QApplication app(argc, argv); if (!QAxFactory::isServer()) { // initialize for stand-alone execution } return app.exec(); }
[virtual] bool QAxFactory::isService() const
Réimplémentez cette fonction pour qu'elle renvoie true si le serveur fonctionne comme un service persistant (par exemple, un service NT) et ne doit pas se terminer même si tous les objets fournis ont été libérés.
L'implémentation par défaut renvoie false.
[pure virtual] const QMetaObject *QAxFactory::metaObject(const QString &key) const
Réimplémenter cette fonction pour renvoyer la valeur QMetaObject correspondant à key, ou 0 si cette fabrique ne prend pas en charge la valeur de key.
[static] bool QAxFactory::registerActiveObject(QObject *object)
Enregistre l'objet QObject object auprès de COM en tant qu'objet en cours d'exécution et renvoie true si l'enregistrement a réussi, sinon il renvoie false. L'objet est automatiquement désenregistré lorsqu'il est détruit.
Cette fonction ne doit être appelée que si l'application a été lancée par l'utilisateur (c'est-à-dire pas par COM pour répondre à une demande), et seulement pour un objet, généralement l'objet de premier niveau de la hiérarchie des objets de l'application.
Cette fonction ne fait rien et renvoie un message faux si l'information de classe de l'objet pour "RegisterObject" n'est pas définie sur "yes", ou si le serveur est un serveur en cours de traitement.
[virtual] void QAxFactory::registerClass(const QString &key, QSettings *settings) const
Enregistre des valeurs supplémentaires pour la classe key dans le registre du système à l'aide de l'objet settings. Les valeurs standard ont déjà été enregistrées par le cadre, mais des valeurs supplémentaires, par exemple des catégories implémentées, peuvent être ajoutées dans une implémentation de cette fonction.
settings->setValue("/CLSID/" + classID(key) + "/Implemented Categories/" + "/{00000000-0000-0000-000000000000}/.", QString());
Si vous réimplémentez cette fonction, vous devez également réimplémenter unregisterClass() pour supprimer les valeurs supplémentaires du registre.
Voir également QSettings.
[static] QString QAxFactory::serverDirPath()
Renvoie le répertoire qui contient le binaire du serveur.
Pour les serveurs hors processus, c'est la même chose que QCoreApplication::applicationDirPath(). Pour les serveurs en cours de traitement, cette fonction renvoie le répertoire qui contient l'application d'hébergement.
[static] QString QAxFactory::serverFilePath()
Renvoie le chemin d'accès au fichier binaire du serveur.
Pour les serveurs hors processus, c'est la même chose que QCoreApplication::applicationFilePath(). Pour les serveurs en cours de traitement, cette fonction renvoie le chemin d'accès au fichier de l'application hôte.
[static] bool QAxFactory::startServer(QAxFactory::ServerType type = MultipleInstances)
Démarre le serveur COM avec type et renvoie true en cas de succès, sinon renvoie false.
L'appel de cette fonction si le serveur est déjà en cours d'exécution (ou pour un serveur en cours d'exécution) ne fait rien et renvoie true.
Le serveur est démarré automatiquement avec type défini sur MultipleInstances si l'exécutable du serveur a été démarré avec le paramètre de ligne de commande -activex. Pour passer à SingleInstance, appelez
if (QAxFactory::isServer()) { QAxFactory::stopServer(); QAxFactory::startServer(QAxFactory::SingleInstance); }
dans votre propre fonction de point d'entrée main().
[virtual] bool QAxFactory::stayTopLevel(const QString &key) const
Réimplémentez cette fonction pour qu'elle renvoie true si le contrôle ActiveX key doit être une fenêtre de premier niveau, par exemple une boîte de dialogue. L'implémentation par défaut renvoie false.
[static] bool QAxFactory::stopServer()
Arrête le serveur COM et renvoie true en cas de succès, sinon renvoie false.
L'appel à cette fonction si le serveur n'est pas en cours d'exécution (ou pour un serveur en cours d'exécution) ne fait rien et renvoie true.
L'arrêt du serveur n'invalide pas les objets existants, mais aucun nouvel objet ne peut être créé à partir du processus serveur existant. En général, COM lance un nouveau processus serveur si des objets supplémentaires sont demandés.
Le serveur est arrêté automatiquement lorsque la fonction main() est renvoyée.
[virtual] QUuid QAxFactory::typeLibID() const
Réimplémenter cette fonction pour renvoyer l'identifiant de la bibliothèque de types du serveur ActiveX.
[virtual] void QAxFactory::unregisterClass(const QString &key, QSettings *settings) const
Désenregistre toutes les valeurs supplémentaires de la classe key dans le registre du système à l'aide de l'objet settings.
settings->remove("/CLSID/" + classID(key) + "/Implemented Categories" + "/{00000000-0000-0000-000000000000}/.");
Voir également registerClass() et QSettings.
[virtual] bool QAxFactory::validateLicenseKey(const QString &key, const QString &licenseKey) const
Réimplémentez cette fonction pour qu'elle renvoie un message vrai si licenseKey est une licence valide pour la classe key, ou si la machine actuelle dispose d'une licence.
L'implémentation par défaut renvoie vrai si la classe key n'est pas sous licence (c'est-à-dire pas d'attribut Q_CLASSINFO() "LicenseKey"), ou si licenseKey correspond à la valeur de l'attribut "LicenseKey", ou si la machine est sous licence par le biais d'un fichier .LIC portant le même nom de fichier que ce serveur COM.
Documentation sur les macros
QAXCLASS(Class)
Cette macro ajoute une classe COM créable Class à la classe QAxFactory déclarée avec la macro QAXFACTORY_BEGIN().
Voir aussi QAXFACTORY_BEGIN(), QAXTYPE(), QAXFACTORY_END() et Q_CLASSINFO().
QAXFACTORY_BEGIN(IDTypeLib, IDApp)
Cette macro peut être utilisée pour exporter plusieurs classes QObject par le biais d'une implémentation QAxFactory implicitement déclarée. Toutes les classes QObject doivent déclarer le ClassID, le InterfaceID et le EventsID (le cas échéant) par le biais de la macro Q_CLASSINFO(). Toutes les déclarations se trouveront dans une bibliothèque de types portant l'identifiant IDTypeLib, et si le serveur est un serveur exécutable, il portera l'identifiant d'application IDApp.
Cette macro doit être utilisée avec les macros QAXCLASS(), QAXTYPE() et QAXFACTORY_END().
QAXFACTORY_BEGIN(
"{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
"{01234567-89AB-CDEF-0123-456789ABCDEF}" // application ID
)
QAXCLASS(Class1)
QAXCLASS(Class2)
QAXFACTORY_END()QAXFACTORY_END()
Complète la déclaration QAxFactory commencée avec la macro QAXFACTORY_BEGIN().
Voir aussi QAXFACTORY_BEGIN(), QAXCLASS() et QAXTYPE().
QAXFACTORY_EXPORT(Class, LibID, AppID)
Cette macro peut être utilisée pour exporter une implémentation QAxFactory Class à partir d'un serveur COM. Toutes les déclarations seront dans une bibliothèque de types avec l'identifiant LibID, et si le serveur est un serveur exécutable, il aura l'identifiant d'application AppID.
QAXFACTORY_EXPORT(
MyFactory, // factory class
"{01234567-89AB-CDEF-0123-456789ABCDEF}", // type library ID
"{01234567-89AB-CDEF-0123-456789ABCDEF}" // application ID
)Voir aussi QAXFACTORY_BEGIN().
QAXTYPE(Class)
Cette macro ajoute une classe COM non créable Class à la classe QAxFactory déclarée avec QAXFACTORY_BEGIN(). La classe Class peut être utilisée dans les API d'autres classes COM exportées par QAXTYPE() ou QAXCLASS().
Les instances du type Class ne peuvent être récupérées qu'à l'aide d'API d'objets déjà instanciés.
Voir également QAXFACTORY_BEGIN(), QAXCLASS(), QAXFACTORY_END() et Q_CLASSINFO().
© 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.