QAxBase Class

QAxBase クラスは、COM オブジェクトを初期化しアクセスするための API を提供する抽象クラスです。詳細...

ヘッダー #include <QAxBase>
CMake: find_package(Qt6 REQUIRED COMPONENTS AxContainer)
target_link_libraries(mytarget PRIVATE Qt6::AxContainer)
qmake: QT += axcontainer
によって継承される:

QAxObject そしてQAxWidget

パブリックな型

パブリック関数

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

保護された関数

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

詳細説明

QAxBase は抽象クラスであり、直接使用することはできません。サブクラスQAxObject およびQAxWidget を介してインスタンス化されます。このクラスは、IUnknown 実装を通して COM オブジェクトに直接アクセスするための API を提供します。COM オブジェクトが IDispatch インターフェースを実装している場合、そのオブジェクトのプロパティとメソッドが Qt のプロパティとスロットとして利用可能になります。

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

オブジェクトの IDispatch 実装によって公開されるプロパティは、Qt Object Model によって提供されるプロパティシステムを通して読み書きすることができます(どちらのサブクラスもQObjects ですので、QObject::setProperty() とQObject::property() を使用することができます)。複数のパラメータを持つプロパティはサポートされていません。

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

オブジェクトの IDispatch 実装によって公開されるプロパティやその他のメソッドの書き込み関数は、dynamicCall() を使用して直接呼び出すか、シグナルに接続されたスロットとして間接的に呼び出すことができます。

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

COM オブジェクトがサポートする発信イベントは、標準 Qt シグナルとして発信されます。

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

QAxBase は、COM データ型と同等の Qt データ型を透過的に変換します。COM データ型の中には、Qt のデータ構造に相当するものがないものもあります。

サポートされている COM データ型は、以下の表の最初の列に記載されています。2 番目の列は、QObject プロパティ関数で使用できる Qt データ型です。3番目の列は、生成されたシグナルとインパラメータ用スロットのプロトタイプで使用されるQtデータ型で、最後の列は、シグナルとアウトパラメータ用スロットのプロトタイプで使用されるQtデータ型です。

COMタイプQtプロパティインパラメータアウトパラメータ
VARIANT_BOOLブールブールブール
BSTRQStringconstQString&QString&
char, short, int, longintintint&
uchar、ushort、uint、ulonguintuintuint&
float、doubledoubledoubledouble&
日付QDateTimeconstQDateTime&QDateTime&
CYクロロングクロロングqlonglong&
OLE_COLORQColorconstQColor&QColor&
safearray(バリアント)QList<QVariantconstQList<QVariant>& セーフ配列(variant)QList<QVariant>アンド
SAFEARRAY(int)、SAFEARRAY(double)、SAFEARRAY(Date)QList<QVariant>.constQList<QVariant>& SAFEARRAY(int), SAFEARRAY(double), SAFEARRAY(date)QList<QVariant>&
セーフアレイ(バイト)QByteArrayconstQByteArray&QByteArray&
セーフアレイ(bstr)QStringListconstQStringList&QStringList&
バリアント型依存constQVariant&QVariant&
IFontDisp*QFontconstQFont&QFont&
IPictureDisp* (画像QPixmapconstQPixmap&QPixmap&
IDispatch*。QAxObject*QAxBase::asVariant()QAxObject* (戻り値)
IUnknown*QAxObject*QAxBase::asVariant()QAxObject* (戻り値)
SCODE、DECIMAL未対応未対応未サポート
VARIANT* (Qt 4.5 以降)未サポートQVariant&QVariant

サポートされているのは、列挙と、サポートされている型への型定義でもある。

以下の IDL で記述された COM インターフェイスのメソッドを呼び出すには、QAxBase API を使用します。

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);
};

QAxBase API をこのように使用します:

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);

オブジェクトが満たすべきQList は、QVariantのパラメータ・リストの要素として提供されなければならないことに注意してください。

サポートされていないデータ型のプロパティにアクセスしたり、パラメータを渡したりする必要がある場合は、IDispatch 実装または他のインターフェイスを介して COM オブジェクトに直接アクセスする必要があります。これらのインタフェースは、queryInterface() から取得できます。

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

COM インタフェースの定義を取得するには、使用するコンポーネントに付属するヘッダ・ファイルを使用する必要があります。コンパイラによっては、#import コンパイラ指令を使用してタイプ・ライブラリをインポートすることもできます。どの型ライブラリをインポートする必要があるか、またどのように使用するかについては、コンポーネントのドキュメントを参照してください。

サポートされていないデータ型のパラメータを渡すイベントに反応する必要がある 場合は、COM イベントが提供するイベント・データを配信するジェネリック・シグナル を使用できます。

QAxObject,QAxWidget,QAxScript,ActiveQt Frameworkも参照してください

メンバ型ドキュメント

[alias] QAxBase::PropertyBag

QMap<QString,QVariant> プロパティを名前:値のペアとして格納することができる。

メンバ関数ドキュメント

[protected] QAxBase::QAxBase()

QAxBase オブジェクトを作成します。

[virtual noexcept] QAxBase::~QAxBase()

COM オブジェクトをシャットダウンし、QAxBase オブジェクトを破棄する。

clear()も参照

QVariant QAxBase::asVariant() const

COM オブジェクトをラップしたQVariant を返します。この variant はdynamicCall() などのパラメータとして使用できます。

ulong QAxBase::classContext() const

ActiveX コントロールが実行されるコンテキストを返します (デフォルトは CLSCTX_SERVER)。

setClassContext()も参照してください

void QAxBase::clear()

COM オブジェクトの接続を切断し、破棄します。

この関数を再実装する場合は、clear() を呼び出すデストラクタも再実装し、clear() 関数の最後でこの実装を呼び出す必要があります。

QString QAxBase::control() const

ActiveX コントロールを返します。

void QAxBase::disableClassInfo()

このActiveXコンテナのクラス情報生成を無効にします。ActiveXコントロールのクラス情報を必要としない場合は、この関数を使用してメタ・オブジェクトの生成を高速化します。

この関数は、オブジェクトの構築直後に呼び出す必要があることに注意してください。

void QAxBase::disableEventSink()

このActiveXコンテナのイベントシンク実装を無効にする。ActiveXコントロールのイベントをリッスンするつもりがない場合は、この関数を使用してメタ・オブジェクトの生成を高速化する。

ActiveXコントロールの中には、イベント・シンクに接続すると不安定になるものがあります。OLEイベントを取得するには、標準COMメソッドを使用して独自のイベント・シンクを登録する必要があります。生の COM オブジェクトにアクセスするには、queryInterface() を使用します。

この関数は、オブジェクトの構築直後に呼び出す必要があることに注意してください。

void QAxBase::disableMetaObject()

このActiveXコンテナのメタオブジェクト生成を無効にする。これは、イベントシンクとクラス情報の生成も無効にします。Qt メタオブジェクトの実装を使用しない場合は、この関数を呼び出してコントロールのインスタンス化を高速化します。dynamicCall() からオブジェクトを呼び出すことはできますが、シグナル、スロット、プロパティはQObject API で利用できなくなります。

ActiveX コントロールの中には、OLE オートメーションで使用すると不安定になるものがあります。queryInterface() が提供する COM インタフェースを通じてこれらのコントロールを使用するには、標準の COM メソッドを使用してください。

この関数は、オブジェクトの構築直後に呼び出す必要があることに注意してください。

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())

COM オブジェクトのメソッドfunction を呼び出し、パラメータvar1var1var2var3var4var5var6var7var8 を渡し、メソッドによって返された値、またはメソッドが値を返さない場合や関数呼び出しに失敗した場合は無効なQVariant を返す。

function QObject::connect がオブジェクトのメソッドである場合、文字列は完全なプロトタイプとして提供されなければならない。

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

また、文字列に埋め込まれたパラメータを渡して関数を呼び出すこともできます。

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

すべてのパラメータは文字列として渡されます。パラメータが正しく解釈されるかどうかはコントロールに依存し、正しく型付けされたパラメータでプロトタイプを使用するよりも遅くなります。

function がプロパティの場合、文字列はプロパティの名前でなければなりません。プロパティ・セッターは、var1 が有効なQVariant である場合に呼び出され、そうでない場合はゲッターが呼び出される。

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

プロパティの取得と設定は、QObject::property() とQObject::setProperty() を使用する方が高速であることに注意してください。

dynamicCall()を使用すると、disabled metaobject ラッパーを使用してオブジェクトを呼び出すこともでき、特に自動化処理中に異なる型の多数のオブジェクトを呼び出す場合、パフォーマンスが大幅に向上します。しかし、ActiveQtはパラメータを検証しません。

dynamicCall()を使って関数を呼び出すことができるのは、QVariant でサポートされているデータ型のパラメータや戻り値を持つものだけです。サポートされているデータ型とサポートされていないデータ型のリストについては、QAxBase クラスのドキュメントを参照してください。サポートされていないデータ型をパラメータ・リストに持つ関数を呼び出したい場合は、queryInterface() を使用して適切な COM インタフェースを取得し、その関数を直接使用します。

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

この方が効率的です。

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

これはオーバーロードされた関数である。

COM オブジェクトのメソッドfunction を呼び出し、vars でパラメータを渡し、メソッドが返す値を返します。メソッドが値を返さない場合、または関数呼び出しが失敗した場合、この関数は無効なQVariant オブジェクトを返します。

メソッドにアウト・パラメータがある場合、varsQVariant オブジェクトが更新されます。

QString QAxBase::generateDocumentation()

ラップされた COM オブジェクトのドキュメントをリッチテキスト文字列で返します。この文字列を HTML ファイルにダンプしたり、QTextBrowser ウィジェットなどで使用することができます。

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

この仮想関数は setControl()によって呼び出され、要求された COM オブジェクトを作成する。ptr はオブジェクトの IUnknown 実装に設定される。この関数は、オブジェクトの初期化に成功した場合は true を返し、失敗した場合は false を返します。

デフォルトの実装では、control() によって返された文字列を解釈し、その文字列がそれぞれのパターンに一致する場合、initializeRemote(),initializeLicensed() またはinitializeActive() を呼び出します。control() が既存のファイル名の場合、initializeFromFile() が呼び出される。パターンに一致しない場合、またはリモート初期化またはライセンス初期化に失敗した場合は、CoCreateInstance が直接使用されてオブジェクトが作成されます。

サポートされているパターンの詳細については、QAxBaseWidget::control プロパティのドキュメントを参照してください。

ptr で返されるインターフェースは、この関数が返されるときに、正確に一度だけ参照されなければならない。CoCreateInstance などで提供されるインターフェイスはすでに参照されているので、再度参照する必要はありません。

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

現在のマシンで実行中のアクティブなインスタンスに接続し、実行中のオブジェクトへの IUnknown インタフェースをptr で返す。この関数は、成功すれば真を返し、そうでなければ偽を返す。

この関数は、制御文字列に "}&" という部分文字列が含まれている場合にinitialize() から呼び出される。

initialize()も参照

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

control プロパティで指定されたファイル名を扱う COM オブジェクトを作成し、そのオブジェクトへの IUnknown インタフェースをptr に返す。この関数は、成功すれば真を返し、そうでなければ偽を返す。

この関数は、コントロール文字列が既存のファイル名である場合にinitialize() から呼び出される。

initialize()も参照

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

ライセンスコントロールのインスタンスを作成し、そのオブジェクトの IUnknown インタフェースをptr に返す。この関数は、成功した場合は true を返し、失敗した場合は false を返す。

この関数は、コントロールの文字列に "}:" という部分文字列が含まれている場合にinitialize() から呼び出されます。ライセンス・キーは、この部分文字列の後に続く必要があります。

initialize()も参照してください

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

リモート・サーバー上にインスタンスを作成し、オブジェクトへの IUnknown インタフェースをptr に返します。この関数は、成功すれば真を返し、そうでなければ偽を返す。

この関数は、制御文字列に"/{"という部分文字列が含まれている場合に、initialize()から呼び出される。リモート・マシンに関する情報は、部分文字列の前に記述する必要がある。

initialize()も参照

bool QAxBase::isNull() const

このラッパーが読み込んだCOMオブジェクトがない場合はtrueを返し、そうでない場合はfalseを返します。

control()も参照してください

QAxBase::PropertyBag QAxBase::propertyBag() const

COM オブジェクトが公開しているすべてのプロパティの名前:値マップを返す。

これは、COM オブジェクトがプロパティ・バッグをサポートしている場合、複数のプロパティを個別に取得するよりも効率的です。

警告: COM オブジェクトのプロパティバッグ実装がすべてのプロパティを返すこと、または返されるプロパティが IDispatch インターフェイスを通して利用可能なものと同じであることは保証されていません。

setPropertyBag()も参照してください

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

プロパティprop が書き込み可能であれば true を返し、そうでなければ false を返します。デフォルトでは、すべてのプロパティは書き込み可能です。

警告: コントロールの実装によっては、この設定が無視されるプロパティもあります。

setPropertyWritable()、QAxBaseWidget::propertyChanged()、QAxBaseObject::propertyChanged()も参照してください

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

COM オブジェクトにインターフェースuuid を要求し、提供されたインターフェースにiface の値を設定する。

COM オブジェクトの QueryInterface 実装の結果を返す。

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())

メソッドまたはプロパティname が提供する COM オブジェクトをラップしたQAxObject へのポインタを返します。パラメータvar1,var1,var2,var3,var4,var5,var6,var7 およびvar8 を渡します。

name がメソッドで提供される場合、文字列には完全な関数プロトタイプを含める必要がある。

name がプロパティの場合、文字列はプロパティ名でなければならず、var1 、・・・var8 は無視される。

返されたQAxObject は、このオブジェクトの子オブジェクト(QAxObject またはQAxWidget 型のいずれか)であり、このオブジェクトが削除されると削除されます。しかし、返されたオブジェクトを自分で削除することは安全であり、サブオブジェクトのリストを反復処理する場合は、そうする必要があります。

COM対応アプリケーションは通常、アプリケーションの特定の要素をディスパッチ・インターフェースとして公開するオブジェクト・モデルを持っています。オブジェクト・モデルの階層を移動するには、このメソッドを使用します。

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)

これはオーバーロードされた関数である。

メソッドがアウトパラメータを持つ場合、varsQVariant オブジェクトが更新されます。

void QAxBase::setClassContext(ulong classContext)

ActiveXコントロールが実行されるコンテキストを設定します。classContext

CoCreateInstance呼び出し時の "dwClsContext "引数に影響する。これは、in-procとout-of-procの両方をサポートするコントロールの起動を制御するために使用できます。また、CLSCTX_ENABLE_CLOAKINGとインパーソネーショントークンを使用する場合、コントロールのパーミッションを変更/削減するために使用できます。

この関数は、setControl() の前に呼び出されなければならないことに注意。

classContext()も参照

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

COM オブジェクトのプロパティをbag の対応する値に設定します。

警告: COM オブジェクトのプロパティ・バッグ実装が、IDispatch インタフェースを通して利用可能な同じプロパティをサポートしていることは保証できないため、propertyBag 関数によって返されたプロパティ・バッグのみを設定する必要があります。

propertyBag()も参照

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

ok が真の場合、prop プロパティを書き込み可能に設定し、そうでない場合、prop を読み取り専用に設定します。デフォルトでは、すべてのプロパティは書き込み可能です。

警告: コントロールの実装によっては、この設定が無視されるプロパティもあります。

propertyWritable()、QAxBaseWidget::propertyChanged()、QAxBaseObject::propertyChanged()も参照

QStringList QAxBase::verbs() const

COM オブジェクトが実行できる動詞のリストを返す。オブジェクトが IOleObject を実装していないか、動詞をサポートしていない場合、 この関数は空の文字列リストを返す。

OLE デフォルトの動詞(OLEIVERB_SHOW など)はリストに含まれないことに注意。

© 2025 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.