이 페이지에서

QAxBase Class

QAxBase 클래스는 COM 개체를 초기화하고 액세스하기 위한 API를 제공하는 추상 클래스입니다. 더 보기...

헤더: #include <qaxbase.h>
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 객체 모델이 제공하는 속성 시스템을 통해 읽고 쓸 수 있습니다(두 하위 클래스 모두 QObject이므로 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 데이터 유형은 다음 표의 첫 번째 열에 나열되어 있습니다. 두 번째 열은 QObject 속성 함수와 함께 사용할 수 있는 Qt 유형입니다. 세 번째 열은 생성된 신호 및 슬롯의 프로토타입에서 입력 매개변수로 사용되는 Qt 유형이며, 마지막 열은 신호 및 슬롯의 프로토타입에서 출력 매개변수로 사용되는 Qt 유형입니다.

COM 유형Qt 속성입력 매개변수출력 매개변수
VARIANT_BOOLboolboolbool&
BSTRQStringconst QString&QString&
char, short, int, longintintint&
uchar, ushort, uint, ulonguintuintuint&
float, doubledoubledoubledouble&
DATEQDateTimeconst QDateTime&QDateTime&
CYqlonglongqlonglongqlonglong&
OLE_COLORQColorconst QColor&QColor&
SAFEARRAY(VARIANT)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&
VARIANT유형에 따라 다름const QVariant&QVariant&
IFontDisp*QFontconst QFont&QFont&
IPictureDisp*QPixmapconst QPixmap&QPixmap&
IDispatch*QAxObject*QAxBase::asVariant()QAxObject* (반환 값)
IUnknown*QAxObject*QAxBase::asVariant()QAxObject* (반환 값)
SCODE, DECIMAL지원되지 않음지원되지 않음지원되지 않음
VARIANT* (Qt 4.5부터)지원되지 않음QVariant&QVariant&

열거형과 지원되는 유형에 대한 typedef도 지원됩니다.

다음 IDL로 정의된 COM 인터페이스의 메서드를 호출하려면

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`의 매개변수 목록에 요소로 제공되어야 한다는 점에 유의하십시오.

지원되지 않는 데이터 유형의 속성에 액세스하거나 매개변수를 전달해야 하는 경우, 해당 COM 객체의 IDispatch 구현체나 다른 인터페이스를 통해 직접 액세스해야 합니다. 이러한 인터페이스는 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 `를 반환합니다. 이 변수는 이후 ` 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 메서드를 사용하여 사용자 정의 이벤트 싱크를 등록해야 합니다. queryInterface()을 사용하여 원시 COM 객체에 액세스하십시오.

이 함수는 객체 생성 직후에 호출해야 합니다.

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`를 호출하며, 매개변수 ` var1`, ` var1`, ` var2`, ` var3`, ` var4`, ` var5`, ` var6`, ` var7 ` 및 ` var8`를 전달하고, 메서드가 반환한 값을 반환하거나, 메서드가 값을 반환하지 않거나 함수 호출에 실패한 경우 무효한 ` 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)

vars 에 포함된 매개변수를 전달하여 COM 개체의 메서드 function 를 호출하고, 해당 메서드가 반환한 값을 반환합니다. 메서드가 값을 반환하지 않거나 함수 호출이 실패한 경우, 이 함수는 유효하지 않은 QVariant 개체를 반환합니다.

메서드에 출력 매개변수가 있는 경우, ` vars `에 포함된 ` QVariant ` 객체들이 업데이트됩니다.

이 함수는 오버로드된 함수입니다.

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)

현재 컴퓨터에서 실행 중인 활성 인스턴스에 연결하고, ptr 에서 실행 중인 객체의 IUnknown 인터페이스를 반환합니다. 이 함수는 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

컨트롤 문자열에 "}&"라는 부분 문자열이 포함되어 있는 경우, 이 함수는 initialize()에 의해 호출됩니다.

initialize()도 참조하십시오 .

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

컨트롤 속성에 지정된 파일 이름을 처리하는 COM 개체를 생성하고, ptr 에서 해당 개체의 IUnknown 인터페이스를 반환합니다. 이 함수는 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

이 함수는 컨트롤 문자열이 기존 파일의 이름인 경우 initialize()에 의해 호출됩니다.

initialize()도 참조하십시오 .

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

라이선스가 부여된 컨트롤의 인스턴스를 생성하고, ptr 에 있는 객체의 IUnknown 인터페이스를 반환합니다. 이 함수는 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

이 함수는 컨트롤 문자열에 "}:"라는 부분 문자열이 포함되어 있는 경우 initialize()에 의해 호출됩니다. 라이선스 키는 이 부분 문자열 뒤에 와야 합니다.

initialize()도 참조하십시오 .

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

원격 서버에 인스턴스를 생성하고, ptr 에서 해당 객체의 IUnknown 인터페이스를 반환합니다. 이 함수는 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

이 함수는 제어 문자열에 "/{"라는 부분 문자열이 포함되어 있는 경우 initialize()에 의해 호출됩니다. 원격 컴퓨터에 대한 정보는 해당 부분 문자열 앞에 제공되어야 합니다.

initialize()도 참조하십시오 .

bool QAxBase::isNull() const

이 래퍼에 의해 로드된 COM 개체가 없으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

control()도 참조하십시오 .

QAxBase::PropertyBag QAxBase::propertyBag() const

COM 개체가 노출하는 모든 속성의 이름:값 맵을 반환합니다.

COM 객체가 속성 백(property bag)을 지원하는 경우, 여러 속성을 개별적으로 가져오는 것보다 이 방법이 더 효율적입니다.

경고: COM 개체의 속성 백(property bag) 구현이 모든 속성을 반환한다고보장되지 않으며, 반환된 속성이 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 의 값을 제공된 인터페이스로 설정하거나, 요청한 인터페이스를 제공할 수 없는 경우 0으로 설정합니다.

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)

vars 에 있는 QVariant 객체들은 메서드에 out 매개변수가 있을 때 업데이트됩니다.

이 함수는 오버로드된 함수입니다.

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 에 지정된 해당 값으로 설정합니다.

경고: propertyBag 함수가 반환한 속성 백(property bag)만 설정해야합니다 . COM 개체의 속성 백 구현이 IDispatch 인터페이스를 통해 사용할 수 있는 것과 동일한 속성을 지원하는지 보장할 수 없기 때문입니다.

propertyBag()도 참조하십시오 .

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

ok 가 true인 경우 prop 속성을 쓰기 가능으로 설정하고, 그렇지 않은 경우 prop 속성을 읽기 전용으로 설정합니다. 기본적으로 모든 속성은 쓰기 가능합니다.

경고: 컨트롤 구현 방식에따라 일부 속성에 대해서는 이 설정이 무시될 수 있습니다.

propertyWritable(), QAxBaseWidget::propertyChanged(), QAxBaseObject::propertyChanged()도 참조하십시오 .

QStringList QAxBase::verbs() const

COM 개체가 실행할 수 있는 동사 목록을 반환합니다. 개체가 IOleObject를 구현하지 않거나 어떤 동사도 지원하지 않는 경우, 이 함수는 빈 문자열 목록을 반환합니다.

OLE 기본 동사(OLEIVERB_SHOW 등)는 이 목록에 포함되지 않는다는 점에 유의하십시오.

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